conn = ((ObjectStoreInterMineImpl) uos).getConnection(); if (!DatabaseUtil.columnExists(conn, "savedbag", "intermine_state") && DatabaseUtil.columnExists(conn, "savedbag", "intermine_current")) { out.println("You must not execute the task load-bagvalues-table." + " Run the task update-savedbag-table task."); return; if (!DatabaseUtil.columnExists(conn, "savedbag", "intermine_state")) { DatabaseUtil.addColumn(db, "savedbag", "intermine_state", DatabaseUtil.Type.text); DatabaseUtil.updateColumnValue(db, "savedbag", "intermine_state", BagState.CURRENT.toString()); if (!DatabaseUtil.tableExists(conn, "bagvalues")) { DatabaseUtil.createBagValuesTables(conn);
/** * Get a db-safe version of a word. * * Attribute names may need some rewriting to become good column names. * * The one exception is 'Class'. It is considered to be an SQL reserved word, * but we use it as a column name * * @param word * token to rewrite if needed * @return db-safe version. */ static String getDBName(final String word) { if ("class".equalsIgnoreCase(word) ) { return word; } return DatabaseUtil.generateSqlCompatibleName(word); }
StringBuffer sb = new StringBuffer("CREATE TABLE " + DatabaseUtil.getTableName(cd) + " ("); boolean needsComma = false; for (AttributeDescriptor ad: cd.getAllAttributeDescriptors()) { sb.append(DatabaseUtil.getColumnName(ad)); sb.append(" "); sb.append(db.getColumnTypeString(Class.forName(ad.getType()))); sb.append(DatabaseUtil.getColumnName(rd)); sb.append(" "); sb.append(db.getColumnTypeString(Integer.class));
/** * Add a column in the table specified in input. A connection is obtained to the database * and automatically released after the addition of the column. * @param database the database to use * @param tableName the table where to add the column * @param columnName the column to add * @param type the type * @throws SQLException if there is a database problem */ public static void addColumn(Database database, String tableName, String columnName, Type type) throws SQLException { Connection connection = database.getConnection(); if (DatabaseUtil.tableExists(connection, tableName)) { try { addColumn(connection, tableName, columnName, type); } finally { connection.close(); } } }
/** * Add a column to an existing database table, if it does not already exist. * It is the users responsibility to close the connection after use. * @param con A connection to the database. * @param tableName The table to add the database too * @param columnName The column to add * @param type The SQL type to add * @throws SQLException if something goes wrong */ public static void addColumn(Connection con, String tableName, String columnName, Type type) throws SQLException { if (!DatabaseUtil.tableExists(con, tableName)) { throw new IllegalArgumentException("there is no table named " + tableName + " in this" + " database to add a new column to"); } if (DatabaseUtil.columnExists(con, tableName, columnName)) { return; } if (!DatabaseUtil.isLegalColumnName(columnName)) { throw new IllegalArgumentException("This is not a legal column name: " + columnName); } String sql = "ALTER TABLE " + tableName + " ADD COLUMN " + columnName + " " + type.getSQLType(); PreparedStatement stmt = con.prepareStatement(sql); LOG.info(stmt.toString()); stmt.executeUpdate(); }
+ DatabaseUtil.getColumnName(reverse); buffer.append(DatabaseUtil.getTableName(referencedClass) + " AS " + indirectTableAlias); buffer.append(" WHERE " + reverseRefAlias + " = " + arg1Alias); String indirectionTable = DatabaseUtil.getIndirectionTableName(arg1ColDesc); String inwardIndirectionCol = indirectTableAlias + "." + DatabaseUtil.getInwardIndirectionColumnName(arg1ColDesc, schema.getVersion()); buffer.append(indirectionTable + " AS " + indirectTableAlias);
@Override public Void run(PreparedStatement stm) throws SQLException { if (!DatabaseUtil.tableExists(stm.getConnection(), TABLE_NAME)) { LOG.info("Creating preferences table"); stm.execute(); } return null; } });
try { con = ((ObjectStoreInterMineImpl) userprofileOsw).getConnection(); if (!DatabaseUtil.tableExists(con, "bagvalues")) { DatabaseUtil.createBagValuesTables(con);
/** * Generate an indirection table * * @param col the CollectionDescriptor to generate table for * @return a String representing the schema for the indirection table */ protected String generateIndirectionTable(CollectionDescriptor col) { StringBuffer sb = new StringBuffer(); String table = DatabaseUtil.getIndirectionTableName(col); String column1 = DatabaseUtil.getInwardIndirectionColumnName(col, schema.getVersion()); String column2 = DatabaseUtil.getOutwardIndirectionColumnName(col, schema.getVersion()); sb.append(INDENT + "<table name=\"") .append(table) .append("\">" + ENDL) .append(generateColumn(column1, "int")) .append(generateColumn(column2, "int")) .append(INDENT + "</table>" + ENDL); return sb.toString(); }
if (!DatabaseUtil.columnExists(connection, SAVEDBAG_TABLE, "intermine_state") && DatabaseUtil.columnExists(connection, SAVEDBAG_TABLE, "intermine_current")) { log("Start replacing intermine_current with intermine_state in savedbag table."); addIntermineStateColumn(connection); if (DatabaseUtil.tableExists(connection, "bagvalues") && !DatabaseUtil.columnExists(connection, "bagvalues", "extra")) { DatabaseUtil.addColumn(connection, "bagvalues", "extra", DatabaseUtil.Type.text); String sqlDeleteIndex = "DROP INDEX bagvalues_index1"; try {
DatabaseUtil.addColumn(con, "FOO", "bar", DatabaseUtil.Type.integer); fail("An exception should have been thrown"); } catch (IllegalArgumentException e) { DatabaseUtil.addColumn(con, "table1", "BAR", DatabaseUtil.Type.integer); fail("An exception should have been thrown"); } catch (IllegalArgumentException e) { DatabaseUtil.addColumn(con, "table1", "col1", DatabaseUtil.Type.integer); assertTrue(DatabaseUtil.columnExists(con, "table1", "col1")); assertFalse(DatabaseUtil.columnExists(con, "table1", "col2")); DatabaseUtil.addColumn(con, "table1", "col2", DatabaseUtil.Type.integer); assertTrue(DatabaseUtil.columnExists(con, "table1", "col2")); DatabaseUtil.updateColumnValue(db, "table1", "col2", 2); DatabaseUtil.addColumn(con, "table1", "col3", DatabaseUtil.Type.text); DatabaseUtil.updateColumnValue(db, "table1", "col3", "bar");
if (fromElement instanceof QueryClass) { QueryClass qc = (QueryClass) fromElement; String baseAlias = DatabaseUtil.generateSqlCompatibleName(q.getAliases().get(qc)); Set<Class<?>> classes = Util.decomposeClass(qc.getType()); List<ClassDescriptorAndAlias> aliases = new ArrayList<ClassDescriptorAndAlias>(); if (sequence == 0) { aliases.add(new ClassDescriptorAndAlias(cld, baseAlias)); state.addToFrom(DatabaseUtil.getTableName(tableMaster) + " AS " + baseAlias); if (schema.isTruncated(tableMaster)) { state.addToFrom(DatabaseUtil.getTableName(tableMaster) + " AS " + baseAlias + "_" + sequence); if (state.getWhereBuffer().length() > 0) { if (cld.getAllFieldDescriptors().contains(field) || schema.isFlatMode(qc .getType())) { fieldToAlias.put(name, alias + "." + DatabaseUtil.getColumnName(field)); break; state.addToFrom("(" + generate((Query) fromElement, schema, state.getDb(), null, QUERY_SUBQUERY_FROM, bagTableNames) + ") AS " + DatabaseUtil.generateSqlCompatibleName(q.getAliases().get(fromElement))); state.setFieldToAlias(fromElement, new AlwaysMap<String, String>(DatabaseUtil .generateSqlCompatibleName((q.getAliases().get(fromElement))))); } else if (fromElement instanceof QueryClassBag) {
public void testGetTableNameTwo() throws Exception { ClassDescriptor cld = new ClassDescriptor("package.name.Array", null, false, new HashSet(), new HashSet(), new HashSet()); assertEquals("intermine_Array", DatabaseUtil.getTableName(cld)); }
c = database.getConnection(); c.setAutoCommit(true); DatabaseUtil.removeAllTables(c); DatabaseUtil.removeSequence(c, SERIAL_SEQUENCE_NAME); DatabaseUtil.removeSequence( c, ObjectStoreInterMineImpl.UNIQUE_INTEGER_SEQUENCE_NAME); } catch (SQLException e) { c = database.getConnection(); c.setAutoCommit(true); DatabaseUtil.createBagValuesTables(c); } catch (SQLException e) { LOG.info("Failed to create bagvalues table: " + e);
DatabaseSchema schema = osimi.getSchema(); ClassDescriptor tableMaster = schema.getTableMaster(cld); String tableName = DatabaseUtil.getTableName(tableMaster); List<String> fields = new ArrayList<String>(); DatabaseUtil.generateSqlCompatibleName(field); if (tableMaster.getReferenceDescriptorByName(field, true) != null) {
public void testGetColumnName() throws Exception { FieldDescriptor attr = new AttributeDescriptor("attr1", "int"); assertEquals(DatabaseUtil.generateSqlCompatibleName("attr1"), DatabaseUtil.getColumnName(attr)); }
.getFieldDescriptorsForClass(ref.getQcType()).get(ref.getFieldName()); if (refDesc.relationType() == FieldDescriptor.M_N_RELATION) { tablenames.add(DatabaseUtil.getIndirectionTableName((CollectionDescriptor) refDesc)); } else if (cc.getQueryClass() == null) { tablenames.add(DatabaseUtil.getTableName(schema.getTableMaster( refDesc.getReferencedClassDescriptor())));
tables.add(getTableName(cld)); tables.addAll(getIndirectionTableNames(cld));
/** * Set the default value in a column for all values where the current value is null. * @param database the database to use * @param tableName the table where update the column * @param columnName the column to Update * @param newValue the value to update * @throws SQLException if there is a database problem */ public static void updateColumnValue(Database database, String tableName, String columnName, Object newValue) throws SQLException { Connection connection = database.getConnection(); try { updateColumnValue(connection, tableName, columnName, newValue); } finally { connection.close(); } }
/** * Set the default value in a column for all values. * @param con A connection to the database to use * @param tableName the table where update the column * @param columnName the column to Update * @param newValue the value to update * @throws SQLException if there is a database problem * * Note, it is the user's responsibility to ensure the connection given is closed. */ public static void updateColumnValue(Connection con, String tableName, String columnName, Object newValue) throws SQLException { if (DatabaseUtil.columnExists(con, tableName, columnName)) { String sql = "UPDATE " + tableName + " SET " + columnName + " = ?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setObject(1, newValue); LOG.info(stmt.toString()); stmt.executeUpdate(); } }