MCPcopy Create free account
hub / github.com/Nemo1870/sql-parse / Select

Class Select

src/main/java/com/sql/parse/statement/impl/druid/Select.java:26–526  ·  view source on GitHub ↗

@date 2019年4月29日上午11:32:02 @desc Select语法操作类

Source from the content-addressed store, hash-verified

24 * @desc Select语法操作类
25 */
26public class Select extends com.sql.parse.statement.Select {
27 private SQLSelectStatement select;
28
29 public Select(SQLSelectStatement select) {
30 this.select = select;
31 }
32
33 public Select(Table table) {
34 String sql = "select * from " + table.getTableName();
35 if (table.getAlias() != null) {
36 sql += " " + table.getAlias();
37 }
38 List<SQLStatement> sqlStatementList = SQLUtils.parseStatements(sql, SqlParseConfig.getDbType());
39 SQLSelectStatement select = (SQLSelectStatement) sqlStatementList.get(0);
40 this.select = select;
41 }
42
43 public Select(String tableName) {
44 this(new Table(tableName));
45 }
46
47 /*public Select(Owner table, SelectItem... columns) {
48 if(columns.length==0){
49 this.select = SelectUtils.buildSelectFromTable(table.getTable());
50 }else{
51 SelectExpressionItem[] array = new SelectExpressionItem[columns.length];
52 for (int i = 0; i < columns.length; i++) {
53 array[i] = columns[i].getColumn();
54 }
55 this.select = SelectUtils.buildSelectFromTableAndSelectItems(table.getTable(), array);
56 }
57 }*/
58
59 @Override
60 public String getSql(boolean safe) {
61 /*where条件为空时,添加[rownum<500]或[limit 500]的条件表达式*/
62 Select mySelect = this.clone();
63 SQLSelectQueryBlock queryBlock = select.getSelect().getQueryBlock();
64 if (queryBlock.getLimit() == null) {
65 boolean flag = true;
66 List<SQLSelectItem> selectItems = queryBlock.getSelectList();
67 if (selectItems.size() == 1) {
68 SQLSelectItem selectItem = selectItems.get(0);
69 SQLExpr expression = selectItem.getExpr();
70 if (expression instanceof SQLAggregateExpr && "count".equals(((SQLAggregateExpr) expression).getMethodName().toLowerCase())) {
71 flag = false;
72 }
73 }
74 if (queryBlock.getWhere() != null) {
75 flag = false;
76 }
77 if (safe && flag) {
78 mySelect.limit(500);
79 }
80 }
81 return SQLUtils.toSQLString(mySelect.getSelect());
82 }
83

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected