Search in sources :

Example 16 with Column

use of net.sf.jsqlparser.schema.Column in project spanner-jdbc by olavloite.

the class CloudSpannerResultSetMetaData method initColumns.

private void initColumns(Select select) {
    columns = new ArrayList<>();
    aliases = new ArrayList<>();
    select.getSelectBody().accept(new SelectVisitorAdapter() {

        @Override
        public void visit(PlainSelect plainSelect) {
            for (SelectItem selectItem : plainSelect.getSelectItems()) {
                selectItem.accept(new SelectItemVisitor() {

                    private boolean foundColumn = false;

                    @Override
                    public void visit(SelectExpressionItem selectExpressionItem) {
                        selectExpressionItem.getExpression().accept(new ExpressionVisitorAdapter() {

                            @Override
                            public void visit(Column column) {
                                registerColumn(column, selectExpressionItem.getAlias());
                                foundColumn = true;
                            }
                        });
                        if (!foundColumn) {
                            registerColumn(null, selectExpressionItem.getAlias());
                        }
                    }

                    @Override
                    public void visit(AllTableColumns allTableColumns) {
                        registerAllTableColumns(allTableColumns.getTable());
                    }

                    @Override
                    public void visit(AllColumns allColumns) {
                        for (Table table : tables) {
                            registerAllTableColumns(table);
                        }
                    }
                });
            }
        }
    });
}
Also used : SelectVisitorAdapter(net.sf.jsqlparser.statement.select.SelectVisitorAdapter) Table(net.sf.jsqlparser.schema.Table) Column(net.sf.jsqlparser.schema.Column) SelectItem(net.sf.jsqlparser.statement.select.SelectItem) AllTableColumns(net.sf.jsqlparser.statement.select.AllTableColumns) SelectExpressionItem(net.sf.jsqlparser.statement.select.SelectExpressionItem) PlainSelect(net.sf.jsqlparser.statement.select.PlainSelect) ExpressionVisitorAdapter(net.sf.jsqlparser.expression.ExpressionVisitorAdapter) SelectItemVisitor(net.sf.jsqlparser.statement.select.SelectItemVisitor) AllColumns(net.sf.jsqlparser.statement.select.AllColumns)

Example 17 with Column

use of net.sf.jsqlparser.schema.Column in project dbeaver by dbeaver.

the class SQLSemanticProcessor method getOrderConstraintExpression.

private static Expression getOrderConstraintExpression(DBRProgressMonitor monitor, DBPDataSource dataSource, PlainSelect select, DBDAttributeConstraint co, boolean forceNumeric) throws JSQLParserException, DBException {
    Expression orderExpr;
    String attrName = DBUtils.getQuotedIdentifier(dataSource, co.getAttributeName());
    if (forceNumeric || attrName.isEmpty()) {
        orderExpr = new LongValue(co.getOrderPosition());
    } 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);
        if (!isValidTableColumn(monitor, dataSource, orderTable, co)) {
            orderTable = null;
        }
        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) AndExpression(net.sf.jsqlparser.expression.operators.conditional.AndExpression) Expression(net.sf.jsqlparser.expression.Expression) Column(net.sf.jsqlparser.schema.Column) LongValue(net.sf.jsqlparser.expression.LongValue)

Example 18 with Column

use of net.sf.jsqlparser.schema.Column 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 19 with Column

use of net.sf.jsqlparser.schema.Column in project dbeaver by dbeaver.

the class SQLSemanticProcessor method getConstraintExpression.

private static Expression getConstraintExpression(DBPDataSource dataSource, PlainSelect select, DBDAttributeConstraint co) throws JSQLParserException {
    Expression orderExpr;
    String attrName = DBUtils.getQuotedIdentifier(dataSource, 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) AndExpression(net.sf.jsqlparser.expression.operators.conditional.AndExpression) Expression(net.sf.jsqlparser.expression.Expression) Column(net.sf.jsqlparser.schema.Column) LongValue(net.sf.jsqlparser.expression.LongValue)

Example 20 with Column

use of net.sf.jsqlparser.schema.Column in project JSqlParser by JSQLParser.

the class CreateViewDeParserTest method testUseExtrnalExpressionDeparser.

/**
 * Test of deParse method, of class CreateViewDeParser.
 */
@Test
public void testUseExtrnalExpressionDeparser() throws JSQLParserException {
    StringBuilder b = new StringBuilder();
    SelectDeParser selectDeParser = new SelectDeParser();
    selectDeParser.setBuffer(b);
    ExpressionDeParser expressionDeParser = new ExpressionDeParser(selectDeParser, b) {

        @Override
        public void visit(Column tableColumn) {
            final Table table = tableColumn.getTable();
            String tableName = null;
            if (table != null) {
                if (table.getAlias() != null) {
                    tableName = table.getAlias().getName();
                } else {
                    tableName = table.getFullyQualifiedName();
                }
            }
            if (tableName != null && !tableName.isEmpty()) {
                getBuffer().append("\"").append(tableName).append("\"").append(".");
            }
            getBuffer().append("\"").append(tableColumn.getColumnName()).append("\"");
        }
    };
    selectDeParser.setExpressionVisitor(expressionDeParser);
    CreateViewDeParser instance = new CreateViewDeParser(b, selectDeParser);
    CreateView vc = (CreateView) CCJSqlParserUtil.parse("CREATE VIEW test AS SELECT a, b FROM mytable");
    instance.deParse(vc);
    assertEquals("CREATE VIEW test AS SELECT a, b FROM mytable", vc.toString());
    assertEquals("CREATE VIEW test AS SELECT \"a\", \"b\" FROM mytable", instance.getBuffer().toString());
}
Also used : Table(net.sf.jsqlparser.schema.Table) Column(net.sf.jsqlparser.schema.Column) CreateView(net.sf.jsqlparser.statement.create.view.CreateView) Test(org.junit.Test)

Aggregations

Column (net.sf.jsqlparser.schema.Column)43 Expression (net.sf.jsqlparser.expression.Expression)19 Test (org.junit.Test)19 Table (net.sf.jsqlparser.schema.Table)18 PlainSelect (net.sf.jsqlparser.statement.select.PlainSelect)18 Select (net.sf.jsqlparser.statement.select.Select)18 ArrayList (java.util.ArrayList)9 SelectExpressionItem (net.sf.jsqlparser.statement.select.SelectExpressionItem)8 SelectItem (net.sf.jsqlparser.statement.select.SelectItem)8 OrderByElement (net.sf.jsqlparser.statement.select.OrderByElement)6 LongValue (net.sf.jsqlparser.expression.LongValue)5 AndExpression (net.sf.jsqlparser.expression.operators.conditional.AndExpression)5 Statement (net.sf.jsqlparser.statement.Statement)5 SelectBody (net.sf.jsqlparser.statement.select.SelectBody)5 SimpleNode (net.sf.jsqlparser.parser.SimpleNode)4 SelectVisitorAdapter (net.sf.jsqlparser.statement.select.SelectVisitorAdapter)4 WriteBuilder (com.google.cloud.spanner.Mutation.WriteBuilder)3 ExpressionVisitorAdapter (net.sf.jsqlparser.expression.ExpressionVisitorAdapter)3 CloudSpannerSQLException (nl.topicus.jdbc.exception.CloudSpannerSQLException)3 SQLException (java.sql.SQLException)2