public int getLength() { if (this.arguments.size() == 1) { SQLExpr arg = this.arguments.get(0); if (arg instanceof SQLIntegerExpr) { return ((SQLIntegerExpr) arg).getNumber().intValue(); } } return -1; }
public SQLIntegerExpr clone() { return new SQLIntegerExpr(this.number); }
public static Object getScriptValueWithQuote(SQLExpr expr, String quote) throws SqlParseException { if (expr instanceof SQLIdentifierExpr || expr instanceof SQLPropertyExpr || expr instanceof SQLVariantRefExpr) { return "doc['" + expr.toString() + "'].value"; } else if (expr instanceof SQLCharExpr) { return quote + ((SQLCharExpr) expr).getValue() + quote; } else if (expr instanceof SQLIntegerExpr) { return ((SQLIntegerExpr) expr).getValue(); } else if (expr instanceof SQLNumericLiteralExpr) { return ((SQLNumericLiteralExpr) expr).getNumber(); } else if (expr instanceof SQLNullExpr) { return ((SQLNullExpr) expr).toString().toLowerCase(); } else if (expr instanceof SQLBinaryOpExpr) { //zhongshu-comment 该分支由忠树添加 String left = "doc['" + ((SQLBinaryOpExpr) expr).getLeft().toString() + "'].value"; String operator = ((SQLBinaryOpExpr) expr).getOperator().getName(); String right = "doc['" + ((SQLBinaryOpExpr) expr).getRight().toString() + "'].value"; return left + operator + right; } throw new SqlParseException("could not parse sqlBinaryOpExpr need to be identifier/valuable got " + expr.getClass().toString() + " with value:" + expr.toString()); }
SQLExpr arg0 = argumentns.get(0); if (arg0 instanceof SQLIntegerExpr) { len = ((SQLIntegerExpr) arg0).getNumber().intValue(); precision = 9; } else { precision = ((SQLIntegerExpr) arg0).getNumber().intValue(); scale = ((SQLIntegerExpr) argumentns.get(1)).getNumber().intValue(); precision = ((SQLIntegerExpr) argumentns.get(0)).getNumber().intValue(); scale = ((SQLIntegerExpr) argumentns.get(1)).getNumber().intValue(); if (precision < scale) { ((SQLIntegerExpr) dataType.getArguments().get(1)).setNumber(precision);
if (isNeedAddLimit) { SQLLimit limit = new SQLLimit(); limit.setRowCount(new SQLIntegerExpr(limitSize)); mysqlSelectQuery.setLimit(limit); rrs.setLimitSize(limitSize); SQLIntegerExpr count = (SQLIntegerExpr) limit.getRowCount(); if (offset != null) { limitStart = offset.getNumber().intValue(); rrs.setLimitStart(limitStart); limitSize = count.getNumber().intValue(); rrs.setLimitSize(limitSize); changedLimit.setRowCount(new SQLIntegerExpr(limitStart + limitSize)); throw new SQLNonTransientException(ErrorCode.ER_PARSE_ERROR + " - " + msg); } else { changedLimit.setOffset(new SQLIntegerExpr(0));
@Override public boolean visit(MySqlSelectQueryBlock.Limit x) { print0(ucase ? "LIMIT " : "limit "); int offset = Integer.MIN_VALUE; if (x.getOffset() != null) { if (x.getOffset() instanceof SQLIntegerExpr && !pr.getMergeContext().isOrderBySplitSql()) { SQLIntegerExpr offsetExpr = (SQLIntegerExpr) x.getOffset(); offset = (Integer) offsetExpr.getValue(); offsetExpr.setNumber(0); offsetExpr.accept(this); } else { x.getOffset().accept(this); } print0(", "); } int limit = Integer.MAX_VALUE; if (x.getRowCount() instanceof SQLIntegerExpr && !pr.getMergeContext().isOrderBySplitSql()) { SQLIntegerExpr rowCountExpr = (SQLIntegerExpr) x.getRowCount(); if (offset != Integer.MIN_VALUE) { limit = (Integer) rowCountExpr.getValue(); rowCountExpr.setNumber(offset + limit); } rowCountExpr.accept(this); } else { x.getRowCount().accept(this); } return false; }
SQLExpr arg0 = argumentns.get(0); if (arg0 instanceof SQLIntegerExpr) { len = ((SQLIntegerExpr) arg0).getNumber().intValue(); scale = -1; } else { precision = ((SQLIntegerExpr) arg0).getNumber().intValue(); scale = ((SQLIntegerExpr) argumentns.get(1)).getNumber().intValue(); precision = ((SQLIntegerExpr) argumentns.get(0)).getNumber().intValue(); scale = ((SQLIntegerExpr) argumentns.get(1)).getNumber().intValue(); if (precision < scale) { ((SQLIntegerExpr) dataType.getArguments().get(1)).setNumber(precision);
int scale = 0; if (x.getArguments().size() > 1) { scale = ((SQLIntegerExpr) x.getArguments().get(1)).getNumber().intValue();
public SQLDataTypeImpl(String name, int precision, int scale) { this(name); addArgument(new SQLIntegerExpr(precision)); addArgument(new SQLIntegerExpr(scale)); }
@Override public boolean visit(MySqlSelectQueryBlock x) { if (x.getLimit() != null) { if (x.getLimit().getOffset() != null) { if (x.getLimit().getOffset() instanceof SQLVariantRefExpr && params != null && params.size() > 0) { SQLVariantRefExpr ref = (SQLVariantRefExpr) x.getLimit().getOffset(); Integer offset = (Integer) params.get(ref.getIndex()); params.set(ref.getIndex(), offset / this.splitNum); } else { SQLIntegerExpr offset = (SQLIntegerExpr) x.getLimit().getOffset(); // 去尾法是符合算法的 offset.setNumber(offset.getNumber().longValue() / this.splitNum); } } } return super.visit(x); } }
public static Object getScriptValueWithQuote(SQLExpr expr, String quote) throws SqlParseException { if (expr instanceof SQLIdentifierExpr || expr instanceof SQLPropertyExpr || expr instanceof SQLVariantRefExpr) { return "doc['" + expr.toString() + "'].value"; } else if (expr instanceof SQLCharExpr) { return quote + ((SQLCharExpr) expr).getValue() + quote; } else if (expr instanceof SQLIntegerExpr) { return ((SQLIntegerExpr) expr).getValue(); } else if (expr instanceof SQLNumericLiteralExpr) { return ((SQLNumericLiteralExpr) expr).getNumber(); } else if (expr instanceof SQLNullExpr) { return ((SQLNullExpr) expr).toString().toLowerCase(); } throw new SqlParseException("could not parse sqlBinaryOpExpr need to be identifier/valuable got" + expr.getClass().toString() + " with value:" + expr.toString()); }
public boolean visit(SQLOrderBy x) { final SQLASTVisitor orderByVisitor = createOrderByVisitor(x); SQLSelectQueryBlock query = null; if (x.getParent() instanceof SQLSelectQueryBlock) { query = (SQLSelectQueryBlock) x.getParent(); } if (query != null) { for (SQLSelectOrderByItem item : x.getItems()) { SQLExpr expr = item.getExpr(); if (expr instanceof SQLIntegerExpr) { int intValue = ((SQLIntegerExpr) expr).getNumber().intValue() - 1; if (intValue < query.getSelectList().size()) { SQLSelectItem selectItem = query.getSelectList().get(intValue); selectItem.getExpr().accept(orderByVisitor); } } else if (expr instanceof MySqlExpr || expr instanceof OracleExpr) { continue; } } } x.accept(orderByVisitor); for (SQLSelectOrderByItem orderByItem : x.getItems()) { statExpr( orderByItem.getExpr()); } return false; }
public void limit(int rowCount, int offset) { if (offset <= 0) { setFirst(new SQLIntegerExpr(rowCount)); } else { throw new UnsupportedOperationException("not support offset"); } }
SQLExpr arg0 = argumentns.get(0); if (arg0 instanceof SQLIntegerExpr) { len = ((SQLIntegerExpr) arg0).getNumber().intValue(); precision = 9; } else { precision = ((SQLIntegerExpr) arg0).getNumber().intValue(); scale = ((SQLIntegerExpr) argumentns.get(1)).getNumber().intValue(); precision = ((SQLIntegerExpr) argumentns.get(0)).getNumber().intValue(); scale = ((SQLIntegerExpr) argumentns.get(1)).getNumber().intValue(); if (precision < scale) { ((SQLIntegerExpr) dataType.getArguments().get(1)).setNumber(precision);
public boolean visit(SQLSelectOrderByItem x) { SQLExpr expr = x.getExpr(); if (expr instanceof SQLIntegerExpr) { print(((SQLIntegerExpr) expr).getNumber().longValue()); } else { printExpr(expr); } SQLOrderingSpecification type = x.getType(); if (type != null) { print(' '); print0(ucase ? type.name : type.name_lcase); } String collate = x.getCollate(); if (collate != null) { print0(ucase ? " COLLATE " : " collate "); print0(collate); } SQLSelectOrderByItem.NullsOrderType nullsOrderType = x.getNullsOrderType(); if (nullsOrderType != null) { print(' '); print0(nullsOrderType.toFormalString()); } return false; }
public void limit(int rowCount, int offset) { if (offset > 0) { throw new UnsupportedOperationException("not support offset"); } setLimit(new SQLLimit(new SQLIntegerExpr(rowCount))); } }
SQLExpr arg0 = argumentns.get(0); if (arg0 instanceof SQLIntegerExpr) { len = ((SQLIntegerExpr) arg0).getNumber().intValue(); scale = -1; } else { precision = ((SQLIntegerExpr) arg0).getNumber().intValue(); scale = ((SQLIntegerExpr) argumentns.get(1)).getNumber().intValue(); precision = ((SQLIntegerExpr) argumentns.get(0)).getNumber().intValue(); scale = ((SQLIntegerExpr) argumentns.get(1)).getNumber().intValue(); if (precision < scale) { ((SQLIntegerExpr) dataType.getArguments().get(1)).setNumber(precision);