Search in sources :

Example 56 with StatementBuilder

use of org.h2.util.StatementBuilder in project h2database by h2database.

the class ConstraintReferential method appendUpdate.

private void appendUpdate(StatementBuilder buff) {
    buff.append("UPDATE ").append(table.getSQL()).append(" SET ");
    buff.resetCount();
    for (IndexColumn c : columns) {
        buff.appendExceptFirst(" , ");
        buff.append(Parser.quoteIdentifier(c.column.getName())).append("=?");
    }
}
Also used : IndexColumn(org.h2.table.IndexColumn)

Example 57 with StatementBuilder

use of org.h2.util.StatementBuilder in project h2database by h2database.

the class ConstraintUnique method getCreateSQLForCopy.

private String getCreateSQLForCopy(Table forTable, String quotedName, boolean internalIndex) {
    StatementBuilder buff = new StatementBuilder("ALTER TABLE ");
    buff.append(forTable.getSQL()).append(" ADD CONSTRAINT ");
    if (forTable.isHidden()) {
        buff.append("IF NOT EXISTS ");
    }
    buff.append(quotedName);
    if (comment != null) {
        buff.append(" COMMENT ").append(StringUtils.quoteStringSQL(comment));
    }
    buff.append(' ').append(getConstraintType().getSqlName()).append('(');
    for (IndexColumn c : columns) {
        buff.appendExceptFirst(", ");
        buff.append(Parser.quoteIdentifier(c.column.getName()));
    }
    buff.append(')');
    if (internalIndex && indexOwner && forTable == this.table) {
        buff.append(" INDEX ").append(index.getSQL());
    }
    return buff.toString();
}
Also used : StatementBuilder(org.h2.util.StatementBuilder) IndexColumn(org.h2.table.IndexColumn)

Example 58 with StatementBuilder

use of org.h2.util.StatementBuilder in project h2database by h2database.

the class Aggregate method getSQLGroupConcat.

private String getSQLGroupConcat() {
    StatementBuilder buff = new StatementBuilder("GROUP_CONCAT(");
    if (distinct) {
        buff.append("DISTINCT ");
    }
    buff.append(on.getSQL());
    if (orderByList != null) {
        buff.append(" ORDER BY ");
        for (SelectOrderBy o : orderByList) {
            buff.appendExceptFirst(", ");
            buff.append(o.expression.getSQL());
            if (o.descending) {
                buff.append(" DESC");
            }
        }
    }
    if (groupConcatSeparator != null) {
        buff.append(" SEPARATOR ").append(groupConcatSeparator.getSQL());
    }
    buff.append(')');
    if (filterCondition != null) {
        buff.append(" FILTER (WHERE ").append(filterCondition.getSQL()).append(')');
    }
    return buff.toString();
}
Also used : SelectOrderBy(org.h2.command.dml.SelectOrderBy) StatementBuilder(org.h2.util.StatementBuilder)

Example 59 with StatementBuilder

use of org.h2.util.StatementBuilder in project h2database by h2database.

the class WebApp method executeLoop.

private String executeLoop(Connection conn, int count, String sql) throws SQLException {
    ArrayList<Integer> params = New.arrayList();
    int idx = 0;
    while (!stop) {
        idx = sql.indexOf('?', idx);
        if (idx < 0) {
            break;
        }
        if (isBuiltIn(sql.substring(idx), "?/*rnd*/")) {
            params.add(1);
            sql = sql.substring(0, idx) + "?" + sql.substring(idx + "/*rnd*/".length() + 1);
        } else {
            params.add(0);
        }
        idx++;
    }
    boolean prepared;
    Random random = new Random(1);
    long time = System.currentTimeMillis();
    if (isBuiltIn(sql, "@statement")) {
        sql = sql.substring("@statement".length()).trim();
        prepared = false;
        Statement stat = conn.createStatement();
        for (int i = 0; !stop && i < count; i++) {
            String s = sql;
            for (Integer type : params) {
                idx = s.indexOf('?');
                if (type.intValue() == 1) {
                    s = s.substring(0, idx) + random.nextInt(count) + s.substring(idx + 1);
                } else {
                    s = s.substring(0, idx) + i + s.substring(idx + 1);
                }
            }
            if (stat.execute(s)) {
                ResultSet rs = stat.getResultSet();
                while (!stop && rs.next()) {
                // maybe get the data as well
                }
                rs.close();
            }
        }
    } else {
        prepared = true;
        PreparedStatement prep = conn.prepareStatement(sql);
        for (int i = 0; !stop && i < count; i++) {
            for (int j = 0; j < params.size(); j++) {
                Integer type = params.get(j);
                if (type.intValue() == 1) {
                    prep.setInt(j + 1, random.nextInt(count));
                } else {
                    prep.setInt(j + 1, i);
                }
            }
            if (session.getContents().isSQLite()) {
                // SQLite currently throws an exception on prep.execute()
                prep.executeUpdate();
            } else {
                if (prep.execute()) {
                    ResultSet rs = prep.getResultSet();
                    while (!stop && rs.next()) {
                    // maybe get the data as well
                    }
                    rs.close();
                }
            }
        }
    }
    time = System.currentTimeMillis() - time;
    StatementBuilder buff = new StatementBuilder();
    buff.append(time).append(" ms: ").append(count).append(" * ");
    if (prepared) {
        buff.append("(Prepared) ");
    } else {
        buff.append("(Statement) ");
    }
    buff.append('(');
    for (int p : params) {
        buff.appendExceptFirst(", ");
        buff.append(p == 0 ? "i" : "rnd");
    }
    return buff.append(") ").append(sql).toString();
}
Also used : Random(java.util.Random) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) StatementBuilder(org.h2.util.StatementBuilder) ResultSet(java.sql.ResultSet) SimpleResultSet(org.h2.tools.SimpleResultSet) PreparedStatement(java.sql.PreparedStatement)

Example 60 with StatementBuilder

use of org.h2.util.StatementBuilder in project h2database by h2database.

the class WebApp method autoCompleteList.

private String autoCompleteList() {
    String query = (String) attributes.get("query");
    boolean lowercase = false;
    if (query.trim().length() > 0 && Character.isLowerCase(query.trim().charAt(0))) {
        lowercase = true;
    }
    try {
        String sql = query;
        if (sql.endsWith(";")) {
            sql += " ";
        }
        ScriptReader reader = new ScriptReader(new StringReader(sql));
        reader.setSkipRemarks(true);
        String lastSql = "";
        while (true) {
            String n = reader.readStatement();
            if (n == null) {
                break;
            }
            lastSql = n;
        }
        String result = "";
        if (reader.isInsideRemark()) {
            if (reader.isBlockRemark()) {
                result = "1#(End Remark)# */\n" + result;
            } else {
                result = "1#(Newline)#\n" + result;
            }
        } else {
            sql = lastSql;
            while (sql.length() > 0 && sql.charAt(0) <= ' ') {
                sql = sql.substring(1);
            }
            if (sql.trim().length() > 0 && Character.isLowerCase(sql.trim().charAt(0))) {
                lowercase = true;
            }
            Bnf bnf = session.getBnf();
            if (bnf == null) {
                return "autoCompleteList.jsp";
            }
            HashMap<String, String> map = bnf.getNextTokenList(sql);
            String space = "";
            if (sql.length() > 0) {
                char last = sql.charAt(sql.length() - 1);
                if (!Character.isWhitespace(last) && (last != '.' && last >= ' ' && last != '\'' && last != '"')) {
                    space = " ";
                }
            }
            ArrayList<String> list = new ArrayList<>(map.size());
            for (Map.Entry<String, String> entry : map.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue();
                String type = "" + key.charAt(0);
                if (Integer.parseInt(type) > 2) {
                    continue;
                }
                key = key.substring(2);
                if (Character.isLetter(key.charAt(0)) && lowercase) {
                    key = StringUtils.toLowerEnglish(key);
                    value = StringUtils.toLowerEnglish(value);
                }
                if (key.equals(value) && !".".equals(value)) {
                    value = space + value;
                }
                key = StringUtils.urlEncode(key);
                key = key.replace('+', ' ');
                value = StringUtils.urlEncode(value);
                value = value.replace('+', ' ');
                list.add(type + "#" + key + "#" + value);
            }
            Collections.sort(list);
            if (query.endsWith("\n") || query.trim().endsWith(";")) {
                list.add(0, "1#(Newline)#\n");
            }
            StatementBuilder buff = new StatementBuilder();
            for (String s : list) {
                buff.appendExceptFirst("|");
                buff.append(s);
            }
            result = buff.toString();
        }
        session.put("autoCompleteList", result);
    } catch (Throwable e) {
        server.traceError(e);
    }
    return "autoCompleteList.jsp";
}
Also used : ArrayList(java.util.ArrayList) StatementBuilder(org.h2.util.StatementBuilder) StringReader(java.io.StringReader) Bnf(org.h2.bnf.Bnf) Map(java.util.Map) HashMap(java.util.HashMap) ScriptReader(org.h2.util.ScriptReader)

Aggregations

StatementBuilder (org.h2.util.StatementBuilder)82 Value (org.h2.value.Value)16 Column (org.h2.table.Column)15 IndexColumn (org.h2.table.IndexColumn)11 PreparedStatement (java.sql.PreparedStatement)9 Expression (org.h2.expression.Expression)9 ValueString (org.h2.value.ValueString)7 Index (org.h2.index.Index)6 DbException (org.h2.message.DbException)6 ResultSet (java.sql.ResultSet)5 Row (org.h2.result.Row)4 SQLException (java.sql.SQLException)3 ArrayList (java.util.ArrayList)3 Constraint (org.h2.constraint.Constraint)3 Database (org.h2.engine.Database)3 ExpressionColumn (org.h2.expression.ExpressionColumn)3 HashMap (java.util.HashMap)2 SelectOrderBy (org.h2.command.dml.SelectOrderBy)2 ResultInterface (org.h2.result.ResultInterface)2 SearchRow (org.h2.result.SearchRow)2