⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 constraintparser.java

📁 FastDb是高效的内存数据库系统
💻 JAVA
字号:
package jnicli;/** * Constraints format: * <pre> *   constraints ::= constraint{',' constraint} *   constraint ::= field-name [index-constraint] [unique-constraint] [references-constraint] [autoincrement-constraint] *   index-constraint ::= 'using' ['thick'] ['case_insensitive'] 'index' *   unique-constraint ::= 'unique' *   autoincrement-constraint ::= 'autoincrement' *   references-constraint ::= 'references' table-name ['(' inverse-field ')'] * </pre> */class ConstraintParser {     int      pos;    String   constraints;    String[] fields;    String[] inverseFields;    String[] referencedTables;    int[]    constraintMasks;    String getToken() {         int p = pos;        int len = constraints.length();        while (p < len && Character.isWhitespace(constraints.charAt(p))) {            p += 1;        }        if (p == len) {             return null;        }        if (Character.isJavaIdentifierStart(constraints.charAt(p))) {            int start = p;            while (++p < len && (Character.isJavaIdentifierPart(constraints.charAt(p))                                 || (constraints.charAt(p)=='.')));            String tkn = constraints.substring(start, p);            pos = p;            return tkn;        } else {            pos += 1;            return constraints.substring(p, p+1);        }    }    ConstraintParser(String fields[], String constraints) {        this.fields = fields;        this.constraints = constraints;        referencedTables = new String[fields.length];        constraintMasks = new int[fields.length];        parse();    }        void parse() {         String tkn;      constraintLoop:        while ((tkn = getToken()) != null) {             for (int i = 0; i < fields.length; i++) {                 if (tkn.equals(fields[i])) {                    tkn = getToken();                    while (tkn != null) {                         if (tkn.equals(",")) {                             continue constraintLoop;                        } else if (tkn.equals("using")) {                             while (!"index".equals(tkn = getToken())) {                                if ("thick".equals(tkn)) {                                     constraintMasks[i] |= THICK;                                } else if ("case_insensitive".equals(tkn)) {                                     constraintMasks[i] |= CASE_INSENSITIVE;                                } else {                                     throw new CliException("Unknown index constraint '" + tkn + "'");                                }                            }                            constraintMasks[i] |= INDEXED;                        } else if (tkn.equals("unique")) {                             constraintMasks[i] |= UNIQUE;                        } else if (tkn.equals("autoincrement")) {                             constraintMasks[i] |= AUTOINCREMENT;                        } else if (tkn.equals("references")) {                             tkn = getToken();                            if (tkn == null) {                                 throw new CliException("Referenced table name expected");                            }                            referencedTables[i] = tkn;                           tkn = getToken();                            if ("(".equals(tkn)) {                                 tkn = getToken();                                if (tkn == null) {                                     throw new CliException("Inverse field name expected");                                }                                inverseFields[i] = tkn;                                tkn = getToken();                                if (!")".equals(tkn)) {                                     throw new CliException("')' expected");                                }                                tkn = getToken();                            }                            continue;                        } else {                             throw new CliException("Unknown constraint '" + tkn + "'");                        }                        tkn = getToken();                    }                    return;                }            }            throw new CliException("Constrained field '" + tkn + "' not found in class");        }    }    static final int INDEXED = 2;    static final int CASE_INSENSITIVE = 8;    static final int UNIQUE = 16;    static final int AUTOINCREMENT = 32;    static final int THICK = 64;    String[] getReferencedTables() {        return referencedTables;    }    String[] getInverseFields() {        return inverseFields;    }    int[] getConstraintMasks() {        return constraintMasks;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -