Search in sources :

Example 6 with Bnf

use of org.h2.bnf.Bnf 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)

Example 7 with Bnf

use of org.h2.bnf.Bnf in project h2database by h2database.

the class Railroads method process.

private void process() throws Exception {
    RailroadImages.main();
    bnf = Bnf.getInstance(getReader());
    Csv csv = new Csv();
    csv.setLineCommentCharacter('#');
    ResultSet rs = csv.read(getReader(), null);
    map("grammar", rs, true);
    processHtml("jcr-sql2.html");
}
Also used : Csv(org.h2.tools.Csv) ResultSet(java.sql.ResultSet)

Aggregations

Bnf (org.h2.bnf.Bnf)3 HashMap (java.util.HashMap)2 RuleFixed (org.h2.bnf.RuleFixed)2 RuleHead (org.h2.bnf.RuleHead)2 DbContextRule (org.h2.bnf.context.DbContextRule)2 StringReader (java.io.StringReader)1 ResultSet (java.sql.ResultSet)1 ResultSetMetaData (java.sql.ResultSetMetaData)1 SQLException (java.sql.SQLException)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1 DbContents (org.h2.bnf.context.DbContents)1 DbProcedure (org.h2.bnf.context.DbProcedure)1 DbSchema (org.h2.bnf.context.DbSchema)1 BnfRailroad (org.h2.build.doc.BnfRailroad)1 BnfSyntax (org.h2.build.doc.BnfSyntax)1 DbException (org.h2.message.DbException)1 Csv (org.h2.tools.Csv)1 ScriptReader (org.h2.util.ScriptReader)1