Search in sources :

Example 1 with RangeTable

use of org.h2.table.RangeTable in project h2database by h2database.

the class Parser method getDualTable.

private Table getDualTable(boolean noColumns) {
    Schema main = database.findSchema(Constants.SCHEMA_MAIN);
    Expression one = ValueExpression.get(ValueLong.get(1));
    return new RangeTable(main, one, one, noColumns);
}
Also used : Expression(org.h2.expression.Expression) ValueExpression(org.h2.expression.ValueExpression) DropSchema(org.h2.command.ddl.DropSchema) CreateSchema(org.h2.command.ddl.CreateSchema) Schema(org.h2.schema.Schema) RangeTable(org.h2.table.RangeTable)

Example 2 with RangeTable

use of org.h2.table.RangeTable in project h2database by h2database.

the class Parser method readTableFilter.

private TableFilter readTableFilter() {
    Table table;
    String alias = null;
    if (readIf("(")) {
        if (isSelect()) {
            Query query = parseSelectUnion();
            read(")");
            query.setParameterList(new ArrayList<>(parameters));
            query.init();
            Session s;
            if (createView != null) {
                s = database.getSystemSession();
            } else {
                s = session;
            }
            alias = session.getNextSystemIdentifier(sqlCommand);
            table = TableView.createTempView(s, session.getUser(), alias, query, currentSelect);
        } else {
            TableFilter top;
            top = readTableFilter();
            top = readJoin(top);
            read(")");
            alias = readFromAlias(null);
            if (alias != null) {
                top.setAlias(alias);
                ArrayList<String> derivedColumnNames = readDerivedColumnNames();
                if (derivedColumnNames != null) {
                    top.setDerivedColumns(derivedColumnNames);
                }
            }
            return top;
        }
    } else if (readIf("VALUES")) {
        table = parseValuesTable(0).getTable();
    } else {
        String tableName = readIdentifierWithSchema(null);
        Schema schema = getSchema();
        boolean foundLeftBracket = readIf("(");
        if (foundLeftBracket && readIf("INDEX")) {
            // Sybase compatibility with
            // "select * from test (index table1_index)"
            readIdentifierWithSchema(null);
            read(")");
            foundLeftBracket = false;
        }
        if (foundLeftBracket) {
            Schema mainSchema = database.getSchema(Constants.SCHEMA_MAIN);
            if (equalsToken(tableName, RangeTable.NAME) || equalsToken(tableName, RangeTable.ALIAS)) {
                Expression min = readExpression();
                read(",");
                Expression max = readExpression();
                if (readIf(",")) {
                    Expression step = readExpression();
                    read(")");
                    table = new RangeTable(mainSchema, min, max, step, false);
                } else {
                    read(")");
                    table = new RangeTable(mainSchema, min, max, false);
                }
            } else {
                Expression expr = readFunction(schema, tableName);
                if (!(expr instanceof FunctionCall)) {
                    throw getSyntaxError();
                }
                FunctionCall call = (FunctionCall) expr;
                if (!call.isDeterministic()) {
                    recompileAlways = true;
                }
                table = new FunctionTable(mainSchema, session, expr, call);
            }
        } else if (equalsToken("DUAL", tableName)) {
            table = getDualTable(false);
        } else if (database.getMode().sysDummy1 && equalsToken("SYSDUMMY1", tableName)) {
            table = getDualTable(false);
        } else {
            table = readTableOrView(tableName);
        }
    }
    ArrayList<String> derivedColumnNames = null;
    IndexHints indexHints = null;
    // for backward compatibility, handle case where USE is a table alias
    if (readIf("USE")) {
        if (readIf("INDEX")) {
            indexHints = parseIndexHints(table);
        } else {
            alias = "USE";
            derivedColumnNames = readDerivedColumnNames();
        }
    } else {
        alias = readFromAlias(alias);
        if (alias != null) {
            derivedColumnNames = readDerivedColumnNames();
            // if alias present, a second chance to parse index hints
            if (readIf("USE")) {
                read("INDEX");
                indexHints = parseIndexHints(table);
            }
        }
    }
    // inherit alias for CTE as views from table name
    if (table.isView() && table.isTableExpression() && alias == null) {
        alias = table.getName();
    }
    TableFilter filter = new TableFilter(session, table, alias, rightsChecked, currentSelect, orderInFrom++, indexHints);
    if (derivedColumnNames != null) {
        filter.setDerivedColumns(derivedColumnNames);
    }
    return filter;
}
Also used : RangeTable(org.h2.table.RangeTable) TruncateTable(org.h2.command.ddl.TruncateTable) CreateTable(org.h2.command.ddl.CreateTable) FunctionTable(org.h2.table.FunctionTable) CreateLinkedTable(org.h2.command.ddl.CreateLinkedTable) Table(org.h2.table.Table) DropTable(org.h2.command.ddl.DropTable) Query(org.h2.command.dml.Query) DropSchema(org.h2.command.ddl.DropSchema) CreateSchema(org.h2.command.ddl.CreateSchema) Schema(org.h2.schema.Schema) ValueString(org.h2.value.ValueString) IndexHints(org.h2.table.IndexHints) RangeTable(org.h2.table.RangeTable) TableFilter(org.h2.table.TableFilter) Expression(org.h2.expression.Expression) ValueExpression(org.h2.expression.ValueExpression) FunctionTable(org.h2.table.FunctionTable) FunctionCall(org.h2.expression.FunctionCall) Session(org.h2.engine.Session)

Example 3 with RangeTable

use of org.h2.table.RangeTable in project ignite by apache.

the class GridSqlQueryParser method parseTable.

/**
 * @param tbl Table.
 */
private GridSqlElement parseTable(Table tbl) {
    GridSqlElement res = (GridSqlElement) h2ObjToGridObj.get(tbl);
    if (res == null) {
        // Table here is semantically equivalent to a table filter.
        if (tbl instanceof TableBase || tbl instanceof MetaTable)
            return new GridSqlTable(tbl);
        // different table filters anyways. Thus the semantics will be correct.
        if (tbl instanceof TableView) {
            if (((TableView) tbl).isRecursive()) {
                throw new IgniteSQLException("Recursive CTE ('WITH RECURSIVE (...)') is not supported.", IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
            }
            Query qry = VIEW_QUERY.get((TableView) tbl);
            res = new GridSqlSubquery(parseQuery(qry));
        } else if (tbl instanceof FunctionTable)
            res = parseExpression(FUNC_EXPR.get((FunctionTable) tbl), false);
        else if (tbl instanceof RangeTable) {
            res = new GridSqlFunction(GridSqlFunctionType.SYSTEM_RANGE);
            res.addChild(parseExpression(RANGE_MIN.get((RangeTable) tbl), false));
            res.addChild(parseExpression(RANGE_MAX.get((RangeTable) tbl), false));
        } else if (tbl instanceof MetaTable)
            res = new GridSqlTable(tbl);
        else
            assert0(false, "Unexpected Table implementation [cls=" + tbl.getClass().getSimpleName() + ']');
        h2ObjToGridObj.put(tbl, res);
    }
    return res;
}
Also used : Query(org.h2.command.dml.Query) FunctionTable(org.h2.table.FunctionTable) IgniteSQLException(org.apache.ignite.internal.processors.query.IgniteSQLException) MetaTable(org.h2.table.MetaTable) TableBase(org.h2.table.TableBase) TableView(org.h2.table.TableView) RangeTable(org.h2.table.RangeTable)

Aggregations

RangeTable (org.h2.table.RangeTable)3 CreateSchema (org.h2.command.ddl.CreateSchema)2 DropSchema (org.h2.command.ddl.DropSchema)2 Query (org.h2.command.dml.Query)2 Expression (org.h2.expression.Expression)2 ValueExpression (org.h2.expression.ValueExpression)2 Schema (org.h2.schema.Schema)2 FunctionTable (org.h2.table.FunctionTable)2 IgniteSQLException (org.apache.ignite.internal.processors.query.IgniteSQLException)1 CreateLinkedTable (org.h2.command.ddl.CreateLinkedTable)1 CreateTable (org.h2.command.ddl.CreateTable)1 DropTable (org.h2.command.ddl.DropTable)1 TruncateTable (org.h2.command.ddl.TruncateTable)1 Session (org.h2.engine.Session)1 FunctionCall (org.h2.expression.FunctionCall)1 IndexHints (org.h2.table.IndexHints)1 MetaTable (org.h2.table.MetaTable)1 Table (org.h2.table.Table)1 TableBase (org.h2.table.TableBase)1 TableFilter (org.h2.table.TableFilter)1