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

📄 databasescript.java

📁 hsqldb是100%java实现的数据库,是一个开放源代码的JAVA数据库 l 具有标准的SQL语法和JAVA接口 l HSQLDB可以自由使用和分发 l 非常简洁和快速的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    static String getSchemaCreateDDL(Database database, HsqlName schemaName) {        StringBuffer ab = new StringBuffer(128);        ab.append(Token.T_CREATE).append(' ');        ab.append(Token.T_SCHEMA).append(' ');        ab.append(schemaName.statementName).append(' ');        ab.append(Token.T_AUTHORIZATION).append(' ');        ab.append(GranteeManager.DBA_ADMIN_ROLE_NAME);        return ab.toString();    }    static void getTableDDL(Database database, Table t, int i,                            HsqlArrayList forwardFK, boolean useSchema,                            StringBuffer a) {        a.append(Token.T_CREATE).append(' ');        if (t.isTemp) {            a.append(Token.T_GLOBAL).append(' ');            a.append(Token.T_TEMPORARY).append(' ');        }        if (t.isText()) {            a.append(Token.T_TEXT).append(' ');        } else if (t.isCached()) {            a.append(Token.T_CACHED).append(' ');        } else {            a.append(Token.T_MEMORY).append(' ');        }        a.append(Token.T_TABLE).append(' ');        if (useSchema) {            a.append(t.getName().schema.statementName).append('.');        }        a.append(t.getName().statementName);        a.append('(');        int        columns = t.getColumnCount();        int[]      pk      = t.getPrimaryKey();        HsqlName   pkName  = null;        Constraint pkConst = t.getPrimaryConstraint();        if (pkConst != null &&!pkConst.getName().isReservedIndexName()) {            pkName = pkConst.getName();        }        for (int j = 0; j < columns; j++) {            Column column  = t.getColumn(j);            String colname = column.columnName.statementName;            a.append(colname);            a.append(' ');            String sType = Types.getTypeString(column.getType());            a.append(sType);            // append the size and scale if > 0            boolean hasSize = false;            if (column.getType() == Types.TIMESTAMP) {                if (column.getSize() != 6) {                    hasSize = true;                }            } else {                hasSize = column.getSize() > 0;            }            if (hasSize) {                a.append('(');                a.append(column.getSize());                if (column.getScale() > 0) {                    a.append(',');                    a.append(column.getScale());                }                a.append(')');            }            String defaultString = column.getDefaultDDL();            if (defaultString != null) {                a.append(' ').append(Token.T_DEFAULT).append(' ');                a.append(defaultString);            }            if (j == t.getIdentityColumn()) {                a.append(" GENERATED BY DEFAULT AS IDENTITY(START WITH ");                a.append(column.identityStart);                if (column.identityIncrement != 1) {                    a.append(Token.T_COMMA).append(Token.T_INCREMENT).append(                        ' ').append(Token.T_BY).append(' ');                    a.append(column.identityIncrement);                }                a.append(")");            }            if (!column.isNullable()) {                a.append(' ').append(Token.T_NOT).append(' ').append(                    Token.T_NULL);            }            if ((pk.length == 1) && (j == pk[0]) && pkName == null) {                a.append(' ').append(Token.T_PRIMARY).append(' ').append(                    Token.T_KEY);            }            if (j < columns - 1) {                a.append(',');            }        }        if (pk.length > 1 || (pk.length == 1 && pkName != null)) {            a.append(',');            if (pkName != null) {                a.append(Token.T_CONSTRAINT).append(' ');                a.append(pkName.statementName).append(' ');            }            a.append(Token.T_PRIMARY).append(' ').append(Token.T_KEY);            getColumnList(t, pk, pk.length, a);        }        Constraint[] v = t.getConstraints();        for (int j = 0, vSize = v.length; j < vSize; j++) {            Constraint c = v[j];            switch (c.getType()) {                case Constraint.UNIQUE :                    a.append(',').append(Token.T_CONSTRAINT).append(' ');                    a.append(c.getName().statementName);                    a.append(' ').append(Token.T_UNIQUE);                    int[] col = c.getMainColumns();                    getColumnList(c.getMain(), col, col.length, a);                    break;                case Constraint.FOREIGN_KEY :                    // forward referencing FK                    Table maintable = c.getMain();                    int maintableindex =                        database.schemaManager.getTableIndex(maintable);                    if (maintableindex > i) {                        forwardFK.add(c);                    } else {                        a.append(',');                        getFKStatement(c, a);                    }                    break;                case Constraint.CHECK :                    try {                        a.append(',').append(Token.T_CONSTRAINT).append(' ');                        a.append(c.getName().statementName);                        a.append(' ').append(Token.T_CHECK).append('(');                        a.append(c.core.check.getDDL());                        a.append(')');                    } catch (HsqlException e) {                        // should not throw as it is already tested OK                    }                    break;            }        }        a.append(')');        if (t.onCommitPreserve) {            a.append(' ').append(Token.T_ON).append(' ');            a.append(Token.T_COMMIT).append(' ').append(Token.T_PRESERVE);            a.append(' ').append(Token.T_ROWS);        }    }    /**     * Generates the SET TABLE <tablename> SOURCE <string> statement for a     * text table;     */    static String getDataSource(Table t) {        String dataSource = t.getDataSource();        if (dataSource == null) {            return null;        }        boolean      isDesc = t.isDescDataSource();        StringBuffer a      = new StringBuffer(128);        a.append(Token.T_SET).append(' ').append(Token.T_TABLE).append(' ');        a.append(t.getName().statementName);        a.append(' ').append(Token.T_SOURCE).append(' ').append('"');        a.append(dataSource);        a.append('"');        if (isDesc) {            a.append(' ').append(Token.T_DESC);        }        return a.toString();    }    /**     * Generates the SET TABLE <tablename> SOURCE HEADER <string> statement for a     * text table;     */    static String getDataSourceHeader(Table t) {        String header = t.getHeader();        if (header == null) {            return null;        }        StringBuffer a = new StringBuffer(128);        a.append(Token.T_SET).append(' ').append(Token.T_TABLE).append(' ');        a.append(t.getName().statementName);        a.append(' ').append(Token.T_SOURCE).append(' ');        a.append(Token.T_HEADER).append(' ');        a.append(header);        return a.toString();    }    /**     * Generates the column definitions for a table.     */    private static void getColumnList(Table t, int[] col, int len,                                      StringBuffer a) {        a.append('(');        for (int i = 0; i < len; i++) {            a.append(t.getColumn(col[i]).columnName.statementName);            if (i < len - 1) {                a.append(',');            }        }        a.append(')');    }    /**     * Generates the foreign key declaration for a given Constraint object.     */    private static void getFKStatement(Constraint c, StringBuffer a) {        a.append(Token.T_CONSTRAINT).append(' ');        a.append(c.getName().statementName);        a.append(' ').append(Token.T_FOREIGN).append(' ').append(Token.T_KEY);        int[] col = c.getRefColumns();        getColumnList(c.getRef(), col, col.length, a);        a.append(' ').append(Token.T_REFERENCES).append(' ');        a.append(c.getMain().getName().statementName);        col = c.getMainColumns();        getColumnList(c.getMain(), col, col.length, a);        if (c.getDeleteAction() != Constraint.NO_ACTION) {            a.append(' ').append(Token.T_ON).append(' ').append(                Token.T_DELETE).append(' ');            a.append(getFKAction(c.getDeleteAction()));        }        if (c.getUpdateAction() != Constraint.NO_ACTION) {            a.append(' ').append(Token.T_ON).append(' ').append(                Token.T_UPDATE).append(' ');            a.append(getFKAction(c.getUpdateAction()));        }    }    /**     * Returns the foreign key action rule.     */    private static String getFKAction(int action) {        switch (action) {            case Constraint.CASCADE :                return Token.T_CASCADE;            case Constraint.SET_DEFAULT :                return Token.T_SET + ' ' + Token.T_DEFAULT;            case Constraint.SET_NULL :                return Token.T_SET + ' ' + Token.T_NULL;            default :                return Token.T_NO + ' ' + Token.T_ACTION;        }    }    /**     * Adds a script line to the result.     */    private static void addRow(Result r, String sql) {        if (sql == null || sql.length() == 0) {            return;        }        String[] s = new String[1];        s[0] = sql;        r.add(s);    }    /**     * Generates the GRANT statements for grantees.     *     * When views is true, generates rights for views only. Otherwise generates     * rights for tables and classes.     *     * Does not generate script for:     *     * grant on builtin classes to public     * grant select on system tables     *     */    private static void addRightsStatements(Database dDatabase, Result r) {        StringBuffer   a;        HashMappedList userlist = dDatabase.getUserManager().getUsers();        Iterator       users    = userlist.values().iterator();        GranteeManager gm       = dDatabase.getGranteeManager();        Iterator       grantees = gm.getGrantees().iterator();        for (; users.hasNext(); ) {            User   u    = (User) users.next();            String name = u.getName();            // PUBLIC user is not persisted.  (However, his            // grants/revokes are).  _SYSTEM user not in user list.            if (!name.equals(Token.T_PUBLIC)) {                addRow(r, u.getCreateUserDDL());            }        }        // grantees has ALL Users and Roles, incl. hidden and reserved ones.        // Therefore, we filter out the non-persisting ones.        for (; grantees.hasNext(); ) {            Grantee g    = (Grantee) grantees.next();            String  name = g.getName();            // _SYSTEM user, DBA Role grants/revokes not persisted            if (name.equals("_SYSTEM") || name.equals("DBA")) {                continue;            }            String roleString = g.allRolesString();            if (roleString != null) {                addRow(r, "GRANT " + roleString + " TO " + name);            }            IntValueHashMap rightsmap = g.getRights();            if (rightsmap == null) {                continue;            }            Iterator dbobjects = rightsmap.keySet().iterator();            while (dbobjects.hasNext()) {                Object nameobject = dbobjects.next();                int    right      = rightsmap.get(nameobject, 0);                a = new StringBuffer(64);                a.append(Token.T_GRANT).append(' ');                a.append(GranteeManager.getRightsList(right));                a.append(' ').append(Token.T_ON).append(' ');                if (nameobject instanceof String) {                    if (nameobject.equals("java.lang.Math")                            || nameobject.equals("org.hsqldb.Library")) {                        continue;                    }                    a.append("CLASS \"");                    a.append((String) nameobject);                    a.append('\"');                } else {                    HsqlName hsqlname = (HsqlName) nameobject;                    // assumes all non String objects are table names                    Table table = dDatabase.schemaManager.findUserTable(null,                        hsqlname.name, hsqlname.schema.name);                    // either table != null or is system table                    if (table != null) {                        a.append(hsqlname.schema.statementName).append(                            '.').append(hsqlname.statementName);                    } else {                        continue;                    }                }                a.append(' ').append(Token.T_TO).append(' ');                a.append(g.getName());                addRow(r, a.toString());            }        }    }}

⌨️ 快捷键说明

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