<commit_before>package app.hongs.db.util;

import app.hongs.HongsError;
import app.hongs.HongsException;
import app.hongs.db.link.Link;
import app.hongs.db.link.Loop;
import app.hongs.util.Synt;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 查询结构及操作
 *
 * <p>
 * 字段名前, 用"."表示属于当前表, 用":"表示属于上级表<br/>
 * 关联字段, 用"表.列"描述字段时, "."的两侧不得有空格<br/>
 * 本想自动识别字段的所属表(可部分区域), 但总是出问题<br/>
 * 好的规则胜过万行代码, 定此规矩, 多敲了一个符号而已<br/>
 * setOption 用于登记特定查询选项, 以备组织查询结构的过程中读取
 * </p>
 *
 * <p>
 * [2015/11/24 00:28]<br/>
 * 已解决加表名前缀的问题, 且兼容上面旧的前缀规则;<br/>
 * 本类处理一般的查询尚可, 过于复杂的查询请勿使用;<br/>
 * 增加了忽略别名的前缀 !, 单纯统计行数须写 COUNT(!*)
 * </p>
 *
 * <h3>使用以下方法将SQL语句拆解成对应部分:</h3>
 * <pre>
 *  select       SELECT    field1, field2
 *  from         FROM      tableName AS name
 *  join.by.on   LEFT JOIN assocName AS nam2 ON nam2.xx = name.yy
 *  filter       WHERE     expr1 AND expr2
 *  groupBy      GROUP BY  field1, field2
 *  having       HAVING    expr1 AND expr2
 *  orderBy      ORDER BY  field1, field2
 *  limit        LIMIT     start, limit
 *  <b>注意: 以上所列方法为追加操作; 五字母方法(field,where,group,havin,order)为设置操作, 会清空原值</b>
 * </pre>
 *
 * <h3>系统已知 options:</h3>
 * <pre>
 FETCH_OBJECT : boolean     获取对象; 作用域: FetchCase
 UNFIX_FIELD  : boolean     不要自动补全表名; 作用域: FetchCase
 UNFIX_ALIAS  : boolean     不要自动补全别名; 作用域: FetchCase
 ASSOC_MULTI  : boolean     多行关联(使用IN方式关联); 作用域: FetchMore
 ASSOC_MERGE  : boolean     归并关联(仅限非多行关联); 作用域: FetchMore
 ASSOC_FILLS  : boolean     补全空白关联数据; 作用域: FetchMore
 ASSOCS       : Set         仅对某些表做关联; 作用域: UniteTool.fetchMore
 ASSOC_TYPES  : Set         仅对某些类型关联; 作用域: UniteTool.fetchMore
 ASSOC_JOINS  : Set         仅对某些类型连接; 作用域: UniteTool.fetchMore
 page         : int|String  分页页码; 作用域: FetchPage
 pags         : int|String  链接数量; 作用域: FetchPage
 rows         : int|String  分页行数; 作用域: FetchPage
 LISTABLE     : Map         可列举列; 作用域: UniteCase
 SORTABLE     : Map         可排序列; 作用域: UniteCase
 FILTABLE     : Map         可过滤列; 作用域: UniteCase
 FINDABLE     : Map         可搜索列; 作用域: UniteCase
 INCLUDE_REMOVED : boolean  包含伪删除的数据; 作用域: Table.fetchMore
 INCLUDE_HASMANY : boolean  包含多对多额关联; 作用域: Model.filter
 * </pre>
 *
 * <h3>异常代码:</h3>
 * <pre>
 * 区间: 0x10b0~0x10bf
 * 0x10b0 无法识别关联类型(JOIN)
 * 0x10b2 必须指定关联条件(FULL|LEFT|RIGHT)_JOIN
 * 0x10b4 没有指定查询表名
 * 0x10b6 没有指定查询的库
 * </pre>
 *
 * @author Hongs
 */
public class FetchCase
  implements Cloneable, Serializable
{

  protected String              tableName;
  protected String              name;

  protected StringBuilder       fields;
  protected StringBuilder       wheres;
  protected StringBuilder       groups;
  protected StringBuilder       havins;
  protected StringBuilder       orders;
  protected int[]               limits;

  protected List<Object>        wparams;
  protected List<Object>        vparams;<commit_msg>重命名方法后IDE将其他注释里的对应词全部改名, 将此部分名称改回<commit_after>package app.hongs.db.util;

import app.hongs.HongsError;
import app.hongs.HongsException;
import app.hongs.db.link.Link;
import app.hongs.db.link.Loop;
import app.hongs.util.Synt;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 查询结构及操作
 *
 * <p>
 * 字段名前, 用"."表示属于当前表, 用":"表示属于上级表<br/>
 * 关联字段, 用"表.列"描述字段时, "."的两侧不得有空格<br/>
 * 本想自动识别字段的所属表(可部分区域), 但总是出问题<br/>
 * 好的规则胜过万行代码, 定此规矩, 多敲了一个符号而已<br/>
 * setOption 用于登记特定查询选项, 以备组织查询结构的过程中读取
 * </p>
 *
 * <p>
 * [2015/11/24 00:28]<br/>
 * 已解决加表名前缀的问题, 且兼容上面旧的前缀规则;<br/>
 * 本类处理一般的查询尚可, 过于复杂的查询请勿使用;<br/>
 * 增加了忽略别名的前缀 !, 单纯统计行数须写 COUNT(!*)
 * </p>
 *
 * <h3>使用以下方法将SQL语句拆解成对应部分:</h3>
 * <pre>
 *  select       SELECT    field1, field2
 *  from         FROM      tableName AS name
 *  join.by.on   LEFT JOIN assocName AS nam2 ON nam2.xx = name.yy
 *  filter       WHERE     expr1 AND expr2
 *  groupBy      GROUP BY  field1, field2
 *  having       HAVING    expr1 AND expr2
 *  orderBy      ORDER BY  field1, field2
 *  limit        LIMIT     start, limit
 *  <b>注意: 以上所列方法为追加操作; 五字母方法(field,where,group,havin,order)为设置操作, 会清空原值</b>
 * </pre>
 *
 * <h3>系统已知 options:</h3>
 * <pre>
 * FETCH_OBJECT : boolean     获取对象; 作用域: FetchCase
 * UNFIX_FIELD  : boolean     不要自动补全表名; 作用域: FetchCase
 * UNFIX_ALIAS  : boolean     不要自动补全别名; 作用域: FetchCase
 * ASSOC_MULTI  : boolean     多行关联(使用IN方式关联); 作用域: FetchMore
 * ASSOC_MERGE  : boolean     归并关联(仅限非多行关联); 作用域: FetchMore
 * ASSOC_FILLS  : boolean     补全空白关联数据; 作用域: FetchMore
 * ASSOCS       : Set         仅对某些表做关联; 作用域: UniteTool.fetchMore
 * ASSOC_TYPES  : Set         仅对某些类型关联; 作用域: UniteTool.fetchMore
 * ASSOC_JOINS  : Set         仅对某些类型连接; 作用域: UniteTool.fetchMore
 * page         : int|String  分页页码; 作用域: FetchPage
 * pags         : int|String  链接数量; 作用域: FetchPage
 * rows         : int|String  分页行数; 作用域: FetchPage
 * LISTABLE     : Map         可列举列; 作用域: UniteCase
 * SORTABLE     : Map         可排序列; 作用域: UniteCase
 * FILTABLE     : Map         可过滤列; 作用域: UniteCase
 * FINDABLE     : Map         可搜索列; 作用域: UniteCase
 * INCLUDE_REMOVED : boolean  包含伪删除的数据; 作用域: Table.fetchMore
 * INCLUDE_HASMANY : boolean  包含多对多额关联; 作用域: Model.filter
 * </pre>
 *
 * <h3>异常代码:</h3>
 * <pre>
 * 区间: 0x10b0~0x10bf
 * 0x10b0 无法识别关联类型(JOIN)
 * 0x10b2 必须指定关联条件(FULL|LEFT|RIGHT)_JOIN
 * 0x10b4 没有指定查询表名
 * 0x10b6 没有指定查询的库
 * </pre>
 *
 * @author Hongs
 */
public class FetchCase
  implements Cloneable, Serializable
{

  protected String              tableName;
  protected String              name;

  protected StringBuilder       fields;
  protected StringBuilder       wheres;
  protected StringBuilder       groups;
  protected StringBuilder       havins;
  protected StringBuilder       orders;
  protected int[]               limits;

  protected List<Object>        wparams;
  protected List<Object>        vparams;
{'fraction_non_alphanumeric': 0.10967213114754099, 'fraction_numerical': 0.01737704918032787, 'mean_word_length': 2.8662864385297846, 'pattern_counts': {'":': 2, '<': 57, '<?xml version=': 0, '>': 57, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7586878', 'n_tokens_mistral': 2897, 'n_tokens_neox': 3102, 'n_words': 508}