@Override public Expression optimize(Session session) { left = left.optimize(session); return this; }
@Override public Expression optimize(Session session) { expr = expr.optimize(session); return this; }
@Override public void prepare() { expression = expression.optimize(session); expressions = new Expression[] { expression }; isResultSet = expression.getType() == Value.RESULT_SET; if (isResultSet) { prepareAlways = true; } }
private ValueResultSet getValueResultSet(Session session) { functionExpr = functionExpr.optimize(session); Value v = functionExpr.getValue(session); if (v == ValueNull.INSTANCE) { return null; } return (ValueResultSet) v; }
protected String getFileName() { if (fileNameExpr != null && fileName == null) { fileName = fileNameExpr.optimize(session).getValue(session).getString(); if (fileName == null || fileName.trim().length() == 0) { fileName = "script.sql"; } fileName = SysProperties.getScriptDirectory() + fileName; } return fileName; }
private Long getLong(Expression expr) { if (expr == null) { return null; } return expr.optimize(session).getValue(session).getLong(); }
@Override public Expression optimize(Session session) { left = left.optimize(session); if (left.isConstant() && left == ValueExpression.getNull()) { return left; } return this; }
private Long getLong(Expression expr) { if (expr == null) { return null; } return expr.optimize(session).getValue(session).getLong(); }
private int getIntValue() { expression = expression.optimize(session); return expression.getValue(session).getInt(); }
/** * Get the sample size, if set. * * @param session the session * @return the sample size */ int getSampleSizeValue(Session session) { if (sampleSizeExpr == null) { return 0; } Value v = sampleSizeExpr.optimize(session).getValue(session); if (v == ValueNull.INSTANCE) { return 0; } return v.getInt(); }
private static byte[] getByteArray(Session session, Expression e) { String s = e.optimize(session).getValue(session).getString(); return s == null ? new byte[0] : StringUtils.convertHexToBytes(s); }
@Override public Expression optimize(Session session) { boolean allConst = true; for (int i = 0; i < list.length; i++) { Expression e = list[i].optimize(session); if (!e.isConstant()) { allConst = false; } list[i] = e; } if (allConst) { return ValueExpression.get(getValue(session)); } return this; }
/** * Set the on update expression. * * @param session the session * @param onUpdateExpression the on update expression */ public void setOnUpdateExpression(Session session, Expression onUpdateExpression) { // also to test that no column names are used if (onUpdateExpression != null) { onUpdateExpression = onUpdateExpression.optimize(session); if (onUpdateExpression.isConstant()) { onUpdateExpression = ValueExpression.get(onUpdateExpression.getValue(session)); } } this.onUpdateExpression = onUpdateExpression; }
@Override public Expression optimize(Session session) { left = left.optimize(session); query.setRandomAccessResult(true); session.optimizeQueryExpression(query); if (query.getColumnCount() != 1) { throw DbException.get(ErrorCode.SUBQUERY_IS_NOT_SINGLE_COLUMN); } // Can not optimize: the data may change return this; }
private String readString() { Expression expr = readExpression().optimize(session); if (!(expr instanceof ValueExpression)) { throw DbException.getSyntaxError(sqlCommand, parseIndex, "string"); } return expr.getValue(session).getString(); }
@Override public Expression optimize(Session session) { boolean allConst = isDeterministic(); for (int i = 0, len = args.length; i < len; i++) { Expression e = args[i].optimize(session); args[i] = e; allConst &= e.isConstant(); } if (allConst) { return ValueExpression.get(getValue(session)); } return this; }
@Override public Expression optimize(Session session) { Expression e2 = condition.getNotIfPossible(session); if (e2 != null) { return e2.optimize(session); } Expression expr = condition.optimize(session); if (expr.isConstant()) { Value v = expr.getValue(session); if (v == ValueNull.INSTANCE) { return ValueExpression.getNull(); } return ValueExpression.get(v.convertTo(Value.BOOLEAN).negate()); } condition = expr; return this; }
private void initStore() { Database db = session.getDatabase(); byte[] key = null; if (cipher != null && password != null) { char[] pass = password.optimize(session). getValue(session).getString().toCharArray(); key = SHA256.getKeyPasswordHash("script", pass); } String file = getFileName(); store = FileStore.open(db, file, "rw", cipher, key); store.setCheckedWriting(false); store.init(); }
private void parseDeleteGivenTable(Delete command, Expression limit, int start) { if (readIf("WHERE")) { Expression condition = readExpression(); command.setCondition(condition); } if (readIf("LIMIT") && limit == null) { limit = readTerm().optimize(session); } command.setLimit(limit); setSQL(command, "DELETE", start); }