Search in sources :

Example 6 with Expression

use of net.sf.jsqlparser.expression.Expression in project Mybatis-PageHelper by pagehelper.

the class FunctionCountTest method test.

@Test
public void test() {
    Select select = select("select max(name),code,min(aa),nvl(ab,0),heh from user where a > 100");
    List<SelectItem> selectItems = ((PlainSelect) select.getSelectBody()).getSelectItems();
    for (SelectItem item : selectItems) {
        if (item instanceof SelectExpressionItem) {
            Expression exp = ((SelectExpressionItem) item).getExpression();
            if (exp instanceof Function) {
                System.out.println("Function:" + item.toString());
            } else {
                System.out.println("Not a function:" + exp.toString());
            }
        } else {
            System.out.println("Not a function:" + item.toString());
        }
    }
}
Also used : Function(net.sf.jsqlparser.expression.Function) Expression(net.sf.jsqlparser.expression.Expression) SelectItem(net.sf.jsqlparser.statement.select.SelectItem) SelectExpressionItem(net.sf.jsqlparser.statement.select.SelectExpressionItem) Select(net.sf.jsqlparser.statement.select.Select) PlainSelect(net.sf.jsqlparser.statement.select.PlainSelect) PlainSelect(net.sf.jsqlparser.statement.select.PlainSelect) Test(org.junit.Test)

Example 7 with Expression

use of net.sf.jsqlparser.expression.Expression in project dbeaver by serge-rider.

the class SQLSemanticProcessor method getConstraintExpression.

private static Expression getConstraintExpression(PlainSelect select, DBDAttributeConstraint co) throws JSQLParserException {
    Expression orderExpr;
    String attrName = co.getAttribute().getName();
    if (attrName.isEmpty()) {
        orderExpr = new LongValue(co.getAttribute().getOrdinalPosition() + 1);
    } else if (CommonUtils.isJavaIdentifier(attrName)) {
        // Use column table only if there are multiple source tables (joins)
        Table orderTable = CommonUtils.isEmpty(select.getJoins()) ? null : getConstraintTable(select, co);
        orderExpr = new Column(orderTable, attrName);
    } else {
        // TODO: set tableAlias for all column references in expression
        orderExpr = CCJSqlParserUtil.parseExpression(attrName);
    //orderExpr = new CustomExpression(attrName);
    //orderExpr = new LongValue(co.getAttribute().getOrdinalPosition() + 1);
    }
    return orderExpr;
}
Also used : Table(net.sf.jsqlparser.schema.Table) Expression(net.sf.jsqlparser.expression.Expression) AndExpression(net.sf.jsqlparser.expression.operators.conditional.AndExpression) Column(net.sf.jsqlparser.schema.Column) LongValue(net.sf.jsqlparser.expression.LongValue)

Example 8 with Expression

use of net.sf.jsqlparser.expression.Expression in project spanner-jdbc by olavloite.

the class CloudSpannerPreparedStatement method createUpdateMutation.

private Mutation createUpdateMutation(Update update, boolean generateParameterMetaData) throws SQLException {
    if (update.getTables().isEmpty())
        throw new CloudSpannerSQLException("No table found in update statement", Code.INVALID_ARGUMENT);
    if (update.getTables().size() > 1)
        throw new CloudSpannerSQLException("Update statements for multiple tables at once are not supported", Code.INVALID_ARGUMENT);
    String table = unquoteIdentifier(update.getTables().get(0).getFullyQualifiedName());
    getParameterStore().setTable(table);
    List<Expression> expressions = update.getExpressions();
    WriteBuilder builder = Mutation.newUpdateBuilder(table);
    int index = 0;
    for (Column col : update.getColumns()) {
        String columnName = unquoteIdentifier(col.getFullyQualifiedName());
        expressions.get(index).accept(new ValueBinderExpressionVisitorAdapter<>(getParameterStore(), builder.set(columnName), columnName));
        index++;
    }
    visitUpdateWhereClause(update.getWhere(), builder, generateParameterMetaData);
    return builder.build();
}
Also used : Expression(net.sf.jsqlparser.expression.Expression) Column(net.sf.jsqlparser.schema.Column) WriteBuilder(com.google.cloud.spanner.Mutation.WriteBuilder) CloudSpannerSQLException(nl.topicus.jdbc.exception.CloudSpannerSQLException)

Example 9 with Expression

use of net.sf.jsqlparser.expression.Expression in project spanner-jdbc by olavloite.

the class CloudSpannerPreparedStatement method createInsertMutation.

private Mutation createInsertMutation(Insert insert, boolean generateParameterMetaData) throws SQLException {
    ItemsList items = insert.getItemsList();
    if (generateParameterMetaData && items == null && insert.getSelect() != null) {
        // Just initialize the parameter meta data of the select statement
        createSelectBuilder(insert.getSelect(), insert.getSelect().toString());
        return null;
    }
    if (!(items instanceof ExpressionList)) {
        throw new CloudSpannerSQLException("Insert statement must specify a list of values", Code.INVALID_ARGUMENT);
    }
    if (insert.getColumns() == null || insert.getColumns().isEmpty()) {
        throw new CloudSpannerSQLException("Insert statement must specify a list of column names", Code.INVALID_ARGUMENT);
    }
    List<Expression> expressions = ((ExpressionList) items).getExpressions();
    String table = unquoteIdentifier(insert.getTable().getFullyQualifiedName());
    getParameterStore().setTable(table);
    WriteBuilder builder;
    if (insert.isUseDuplicate()) {
        /**
         * Do an insert-or-update. BUT: Cloud Spanner does not support
         * supplying different values for the insert and update statements,
         * meaning that only the values specified in the INSERT part of the
         * statement will be considered. Anything specified in the 'ON
         * DUPLICATE KEY UPDATE ...' statement will be ignored.
         */
        if (this.forceUpdate)
            builder = Mutation.newUpdateBuilder(table);
        else
            builder = Mutation.newInsertOrUpdateBuilder(table);
    } else {
        /**
         * Just do an insert and throw an error if a row with the specified
         * key alread exists.
         */
        builder = Mutation.newInsertBuilder(table);
    }
    int index = 0;
    for (Column col : insert.getColumns()) {
        String columnName = unquoteIdentifier(col.getFullyQualifiedName());
        expressions.get(index).accept(new ValueBinderExpressionVisitorAdapter<>(getParameterStore(), builder.set(columnName), columnName));
        index++;
    }
    return builder.build();
}
Also used : ItemsList(net.sf.jsqlparser.expression.operators.relational.ItemsList) Expression(net.sf.jsqlparser.expression.Expression) Column(net.sf.jsqlparser.schema.Column) WriteBuilder(com.google.cloud.spanner.Mutation.WriteBuilder) CloudSpannerSQLException(nl.topicus.jdbc.exception.CloudSpannerSQLException) ExpressionList(net.sf.jsqlparser.expression.operators.relational.ExpressionList)

Example 10 with Expression

use of net.sf.jsqlparser.expression.Expression in project spanner-jdbc by olavloite.

the class CloudSpannerPreparedStatement method createDeleteMutation.

private Mutation createDeleteMutation(Delete delete, boolean generateParameterMetaData) throws SQLException {
    String table = unquoteIdentifier(delete.getTable().getFullyQualifiedName());
    getParameterStore().setTable(table);
    Expression where = delete.getWhere();
    if (where == null) {
        // Delete all
        return Mutation.delete(table, KeySet.all());
    } else {
        // Delete one
        DeleteKeyBuilder keyBuilder = new DeleteKeyBuilder(getConnection().getTable(table), generateParameterMetaData);
        visitDeleteWhereClause(where, keyBuilder, generateParameterMetaData);
        return Mutation.delete(table, keyBuilder.getKeyBuilder().build());
    }
}
Also used : Expression(net.sf.jsqlparser.expression.Expression)

Aggregations

Expression (net.sf.jsqlparser.expression.Expression)10 Column (net.sf.jsqlparser.schema.Column)5 AndExpression (net.sf.jsqlparser.expression.operators.conditional.AndExpression)3 WriteBuilder (com.google.cloud.spanner.Mutation.WriteBuilder)2 JSQLParserException (net.sf.jsqlparser.JSQLParserException)2 Function (net.sf.jsqlparser.expression.Function)2 LongValue (net.sf.jsqlparser.expression.LongValue)2 ExpressionList (net.sf.jsqlparser.expression.operators.relational.ExpressionList)2 Table (net.sf.jsqlparser.schema.Table)2 PlainSelect (net.sf.jsqlparser.statement.select.PlainSelect)2 Select (net.sf.jsqlparser.statement.select.Select)2 SelectExpressionItem (net.sf.jsqlparser.statement.select.SelectExpressionItem)2 SelectItem (net.sf.jsqlparser.statement.select.SelectItem)2 CloudSpannerSQLException (nl.topicus.jdbc.exception.CloudSpannerSQLException)2 PageException (com.github.pagehelper.PageException)1 ArrayList (java.util.ArrayList)1 Alias (net.sf.jsqlparser.expression.Alias)1 DoubleValue (net.sf.jsqlparser.expression.DoubleValue)1 SignedExpression (net.sf.jsqlparser.expression.SignedExpression)1 ItemsList (net.sf.jsqlparser.expression.operators.relational.ItemsList)1