/** * Create a column from a DatabaseMetaData.getColumns row. * * @param contents the database contents * @param rs the result set * @return the column */ public static DbColumn getColumn(DbContents contents, ResultSet rs) throws SQLException { return new DbColumn(contents, rs, false); }
public DbProcedure(DbSchema schema, ResultSet rs) throws SQLException { this.schema = schema; name = rs.getString("PROCEDURE_NAME"); returnsResult = rs.getShort("PROCEDURE_TYPE") == DatabaseMetaData.procedureReturnsResult; quotedName = schema.getContents().quoteIdentifier(name); }
void setConnection(Connection conn) throws SQLException { this.conn = conn; if (conn == null) { meta = null; } else { meta = conn.getMetaData(); } contents = new DbContents(); }
switch (type) { case SCHEMA: { DbSchema[] schemas = contents.getSchemas(); String best = null; DbSchema bestSchema = null; DbSchema schema = sentence.getLastMatchedSchema(); if (schema == null) { schema = contents.getDefaultSchema(); DbTableOrView[] tables = schema.getTables(); String best = null; DbTableOrView bestTable = null; for (DbTableOrView table : tables) { String compare = up; String name = StringUtils.toUpperEnglish(table.getName()); if (table.getQuotedName().length() > name.length()) { name = table.getQuotedName(); compare = query; sentence.add(table.getQuotedName(), table.getQuotedName().substring(s.length()), Sentence.CONTEXT); s = autoCompleteTableAlias(sentence, true); break; case TABLE_ALIAS: s = autoCompleteTableAlias(sentence, false); break;
private void autoCompleteProcedure(Sentence sentence) { DbSchema schema = sentence.getLastMatchedSchema(); if (schema == null) { schema = contents.getDefaultSchema(); for (DbProcedure procedure : schema.getProcedures()) { final String procName = procedure.getName(); if (procName.startsWith(incompleteFunctionName)) { for (DbColumn parameter : procedure.getParameters()) { if (parameter.getPosition() > 1) { rl = new RuleList(rl, comma, false); DbContextRule columnRule = new DbContextRule(contents, COLUMN); String parameterType = parameter.getDataType(); parameterType.indexOf('(')); columnRule.setColumnType(parameterType); rl = new RuleList(rl, columnRule, false);
String indentation = ", " + level + ", " + (showColumns ? "1" : "2") + ", "; String indentNode = ", " + (level + 1) + ", 2, "; DbTableOrView[] tables = schema.getTables(); if (tables == null) { return treeIndex; boolean isOracle = schema.getContents().isOracle(); boolean notManyTables = tables.length < SysProperties.CONSOLE_MAX_TABLES_LIST_INDEXES; for (DbTableOrView table : tables) { if (table.isView()) { continue; String tab = table.getQuotedName(); if (!mainSchema) { tab = schema.quotedName + "." + tab; buff.append("setNode(").append(treeIndex).append(indentation) .append(" 'table', '") .append(PageParser.escapeJavaScript(table.getName())) .append("', 'javascript:ins(\\'").append(tab).append("\\',true)');\n"); treeIndex++; notManyTables, columnsBuffer); if (!isOracle && notManyTables) { treeIndex = addIndexes(mainSchema, meta, table.getName(), schema.name, buff, treeIndex); .append(PageParser.escapeJavaScript(table.getName())).append("', '") .append(PageParser.escapeJavaScript(columnsBuffer.toString())).append("', ")
isMSSQLServer = url.startsWith("jdbc:sqlserver:"); DatabaseMetaData meta = conn.getMetaData(); String defaultSchemaName = getDefaultSchemaName(meta); String[] schemaNames = getSchemaNames(meta); schemas = new DbSchema[schemaNames.length]; for (int i = 0; i < schemaNames.length; i++) { boolean isDefault = defaultSchemaName == null || defaultSchemaName.equals(schemaName); DbSchema schema = new DbSchema(this, schemaName, isDefault); if (isDefault) { defaultSchema = schema; String[] tableTypes = { "TABLE", "SYSTEM TABLE", "VIEW", "SYSTEM VIEW", "TABLE LINK", "SYNONYM", "EXTERNAL" }; schema.readTables(meta, tableTypes); if (!isPostgreSQL && !isDB2) { schema.readProcedures(meta);
DbSchema(DbContents contents, String name, boolean isDefault) { this.contents = contents; this.name = name; this.quotedName = contents.quoteIdentifier(name); this.isDefault = isDefault; if (name == null) { // firebird isSystem = true; } else if ("INFORMATION_SCHEMA".equals(name)) { isSystem = true; } else if (!contents.isH2() && StringUtils.toUpperEnglish(name).startsWith("INFO")) { isSystem = true; } else if (contents.isPostgreSQL() && StringUtils.toUpperEnglish(name).startsWith("PG_")) { isSystem = true; } else if (contents.isDerby() && name.startsWith("SYS")) { isSystem = true; } else { isSystem = false; } }
ArrayList<DbTableOrView> list = New.arrayList(); while (rs.next()) { DbTableOrView table = new DbTableOrView(this, rs); if (contents.isOracle() && table.getName().indexOf('$') > 0) { continue; for (DbTableOrView tab : tables) { try { tab.readColumns(meta); } catch (SQLException e) {
/** * Read the column for this table from the database meta data. * * @param meta the database meta data */ void readParameters(DatabaseMetaData meta) throws SQLException { ResultSet rs = meta.getProcedureColumns(null, schema.name, name, null); ArrayList<DbColumn> list = New.arrayList(); while (rs.next()) { DbColumn column = DbColumn.getProcedureColumn(schema.getContents(), rs); if (column.getPosition() > 0) { // Not the return type list.add(column); } } rs.close(); parameters = new DbColumn[list.size()]; // Store the parameter in the good position [1-n] for (int i = 0; i < parameters.length; i++) { DbColumn column = list.get(i); if (column.getPosition() > 0 && column.getPosition() <= parameters.length) { parameters[column.getPosition() - 1] = column; } } }
private static int addColumns(boolean mainSchema, DbTableOrView table, StringBuilder buff, int treeIndex, boolean showColumnTypes, StringBuilder columnsBuffer) { DbColumn[] columns = table.getColumns(); for (int i = 0; columns != null && i < columns.length; i++) { DbColumn column = columns[i]; if (columnsBuffer.length() > 0) { columnsBuffer.append(' '); } columnsBuffer.append(column.getName()); String col = escapeIdentifier(column.getName()); String level = mainSchema ? ", 1, 1" : ", 2, 2"; buff.append("setNode(").append(treeIndex).append(level) .append(", 'column', '") .append(PageParser.escapeJavaScript(column.getName())) .append("', 'javascript:ins(\\'").append(col).append("\\')');\n"); treeIndex++; if (mainSchema && showColumnTypes) { buff.append("setNode(").append(treeIndex) .append(", 2, 2, 'type', '") .append(PageParser.escapeJavaScript(column.getDataType())) .append("', null);\n"); treeIndex++; } } return treeIndex; }
/** * Read the column for this table from the database meta data. * * @param meta the database meta data */ public void readColumns(DatabaseMetaData meta) throws SQLException { ResultSet rs = meta.getColumns(null, schema.name, name, null); ArrayList<DbColumn> list = New.arrayList(); while (rs.next()) { DbColumn column = DbColumn.getColumn(schema.getContents(), rs); list.add(column); } rs.close(); columns = list.toArray(new DbColumn[0]); }
private DbColumn(DbContents contents, ResultSet rs, boolean procedureColumn) throws SQLException { name = rs.getString("COLUMN_NAME"); quotedName = contents.quoteIdentifier(name); String type = rs.getString("TYPE_NAME"); boolean isSQLite = contents.isSQLite(); if (precision > 0 && !isSQLite) { type += "(" + precision;
/** * Read all procedures in the dataBase. * @param meta the database meta data * @throws SQLException Error while fetching procedures */ public void readProcedures(DatabaseMetaData meta) throws SQLException { ResultSet rs = meta.getProcedures(null, name, null); ArrayList<DbProcedure> list = New.arrayList(); while (rs.next()) { list.add(new DbProcedure(this, rs)); } rs.close(); procedures = list.toArray(new DbProcedure[0]); if (procedures.length < SysProperties.CONSOLE_MAX_PROCEDURES_LIST_COLUMNS) { for (DbProcedure procedure : procedures) { procedure.readParameters(meta); } } } }
Bnf newBnf = Bnf.getInstance(null); DbContextRule columnRule = new DbContextRule(contents, DbContextRule.COLUMN); DbContextRule newAliasRule = new DbContextRule(contents, DbContextRule.NEW_TABLE_ALIAS); DbContextRule aliasRule = new DbContextRule(contents, DbContextRule.TABLE_ALIAS); DbContextRule tableRule = new DbContextRule(contents, DbContextRule.TABLE); DbContextRule schemaRule = new DbContextRule(contents, DbContextRule.SCHEMA); DbContextRule columnAliasRule = new DbContextRule(contents, DbContextRule.COLUMN_ALIAS); DbContextRule procedure = new DbContextRule(contents, DbContextRule.PROCEDURE); newBnf.updateTopic("procedure", procedure); newBnf.updateTopic("column_name", columnRule);
result = "<br />" + getStackTrace(0, e, session.getContents().isH2()); error = formatAsError(e.getMessage());
for (DbTableOrView table : tables) { String tableName = StringUtils.toUpperEnglish(table.getName()); if (alias.startsWith(tableName) && (best == null || tableName.length() > best.length())) {
public DbTableOrView(DbSchema schema, ResultSet rs) throws SQLException { this.schema = schema; name = rs.getString("TABLE_NAME"); String type = rs.getString("TABLE_TYPE"); isView = "VIEW".equals(type); quotedName = schema.getContents().quoteIdentifier(name); }
/** * Create a column from a DatabaseMetaData.getProcedureColumns row. * * @param contents the database contents * @param rs the result set * @return the column */ public static DbColumn getProcedureColumn(DbContents contents, ResultSet rs) throws SQLException { return new DbColumn(contents, rs, true); }
if (session.getContents().isH2()) { rs.updateString(columnIndex, x); return;