public void setQueryTimeout(int queryTimeout) { int max = database.getSettings().maxQueryTimeout; if (max != 0 && (max < queryTimeout || queryTimeout == 0)) { // the value must be at most max queryTimeout = max; } this.queryTimeout = queryTimeout; // must reset the cancel at here, // otherwise it is still used this.cancelAt = 0; }
public DropView(ServerSession session, Schema schema) { super(session, schema); dropAction = session.getDatabase().getSettings().dropRestrict ? ConstraintReferential.RESTRICT : ConstraintReferential.CASCADE; }
public DropTable(ServerSession session, Schema schema) { super(session, schema); dropAction = session.getDatabase().getSettings().dropRestrict ? ConstraintReferential.RESTRICT : ConstraintReferential.CASCADE; }
public Parser(ServerSession session) { this.database = session.getDatabase(); this.session = session; this.identifiersToUpper = database.getSettings().databaseToUpper; }
public Analyze(ServerSession session) { super(session); sampleRows = session.getDatabase().getSettings().analyzeSample; }
public CompareLike(Database db, Expression left, Expression right, Expression escape, boolean regexp) { this(db.getCompareMode(), db.getSettings().defaultEscape, left, right, escape, regexp); }
public ServerSession(Database database, User user, int id) { this.database = database; this.queryTimeout = database.getSettings().maxQueryTimeout; this.queryCacheSize = database.getSettings().queryCacheSize; this.user = user; this.id = id; Setting setting = database.findSetting(SetTypes.getTypeName(SetTypes.DEFAULT_LOCK_TIMEOUT)); this.lockTimeout = setting == null ? Constants.INITIAL_LOCK_TIMEOUT : setting.getIntValue(); this.currentSchemaName = Constants.SCHEMA_MAIN; }
@Override public Column getRowIdColumn() { if (session.getDatabase().getSettings().rowId) { return table.getRowIdColumn(); } return null; }
private Column parseColumn(Table table) { String columnName = readColumnIdentifier(); if (database.getSettings().rowId && Column.ROWID.equals(columnName)) { return table.getRowIdColumn(); } return table.getColumn(columnName); }
@Override public void setForUpdate(boolean b) { this.isForUpdate = b; if (session.getDatabase().getSettings().selectForUpdateMvcc && session.getDatabase().isMultiVersion()) { isForUpdateMvcc = b; } }
@Override public double getCost(ServerSession session, int[] masks, SortOrder sortOrder) { if (masks != null) { throw DbException.getUnsupportedException("ALIAS"); } long expectedRows; if (functionTable.canGetRowCount()) { expectedRows = functionTable.getRowCountApproximation(); } else { expectedRows = database.getSettings().estimatedFunctionTableRows; } return expectedRows * 10; }
/** * Check if the statement needs to be re-compiled. * * @return true if it must */ public boolean needRecompile() { Database db = session.getDatabase(); if (db == null) { throw DbException.get(ErrorCode.CONNECTION_BROKEN_1, "database closed"); } // parser: currently, compiling every create/drop/... twice // because needRecompile return true even for the first execution return prepareAlways || modificationMetaId < db.getModificationMetaId() || db.getSettings().recompileAlways; }
@Override public String getSQL() { // TODO can remove this method once FUNCTIONS_IN_SCHEMA is enabled if (database.getSettings().functionsInSchema || !getSchema().getName().equals(Constants.SCHEMA_MAIN)) { return super.getSQL(); } return database.quoteIdentifier(getName()); }
@Override public void createIndexConditions(ServerSession session, TableFilter filter) { if (!(left instanceof ExpressionColumn)) { return; } ExpressionColumn l = (ExpressionColumn) left; if (filter != l.getTableFilter()) { return; } if (session.getDatabase().getSettings().optimizeInList) { filter.addIndexCondition(IndexCondition.getInList(l, valueList)); return; } }
@Override public String getSQL(boolean isDistributed) { String sql; boolean quote = getDatabase().getSettings().databaseToUpper; if (column != null) { sql = column.getSQL(); } else { sql = quote ? Parser.quoteIdentifier(columnName) : columnName; } if (tableAlias != null) { String a = quote ? Parser.quoteIdentifier(tableAlias) : tableAlias; sql = a + "." + sql; } if (schemaName != null) { String s = quote ? Parser.quoteIdentifier(schemaName) : schemaName; sql = s + "." + sql; } return sql; }
@Override public void createIndexConditions(ServerSession session, TableFilter filter) { if (!session.getDatabase().getSettings().optimizeInList) { return; } if (!(left instanceof ExpressionColumn)) { return; } ExpressionColumn l = (ExpressionColumn) left; if (filter != l.getTableFilter()) { return; } ExpressionVisitor visitor = ExpressionVisitor.getNotFromResolverVisitor(filter); if (!query.isEverything(visitor)) { return; } filter.addIndexCondition(IndexCondition.getInQuery(l, query)); }
/** * Remove all index conditions that can not be used. */ public void removeUnusableIndexConditions() { for (int i = 0; i < allFilters.length; i++) { TableFilter f = allFilters[i]; setEvaluatable(f, true); if (i < allFilters.length - 1 || f.getSession().getDatabase().getSettings().earlyFilter) { // the last table doesn't need the optimization, // otherwise the expression is calculated twice unnecessarily // (not that bad but not optimal) f.optimizeFullCondition(false); } f.removeUnusableIndexConditions(); } for (TableFilter f : allFilters) { setEvaluatable(f, false); } }
private void setEvaluatable(TableFilter join) { if (session.getDatabase().getSettings().nestedJoins) { setEvaluatable(true); return; } // this table filter is now evaluatable - in all sub-joins do { Expression e = join.getJoinCondition(); if (e != null) { e.setEvaluatable(this, true); } TableFilter n = join.getNestedJoin(); if (n != null) { setEvaluatable(n); } join = join.getJoin(); } while (join != null); }
ResultDiskBuffer(ServerSession session, SortOrder sort, int columnCount) { this.parent = null; this.sort = sort; this.columnCount = columnCount; Database db = session.getDatabase(); rowBuff = DataBuffer.create(db, Constants.DEFAULT_PAGE_SIZE); String fileName = db.createTempFile(); file = db.openFile(fileName, "rw", false); file.setCheckedWriting(false); file.seek(FileStorage.HEADER_LENGTH); if (sort != null) { tapes = Utils.newSmallArrayList(); mainTape = null; } else { tapes = null; mainTape = new ResultDiskTape(); mainTape.pos = FileStorage.HEADER_LENGTH; } this.maxBufferSize = db.getSettings().largeResultBufferSize; }
@Override public String getSQL(boolean isDistributed) { StatementBuilder buff = new StatementBuilder(); // TODO always append the schema once FUNCTIONS_IN_SCHEMA is enabled if (functionAlias.getDatabase().getSettings().functionsInSchema || !functionAlias.getSchema().getName().equals(Constants.SCHEMA_MAIN)) { buff.append(Parser.quoteIdentifier(functionAlias.getSchema().getName())).append('.'); } buff.append(Parser.quoteIdentifier(functionAlias.getName())).append('('); for (Expression e : args) { buff.appendExceptFirst(", "); buff.append(e.getSQL(isDistributed)); } return buff.append(')').toString(); }