@Override public void add(Session session, Row row) { StatementBuilder sql = new StatementBuilder("insert into "); sql.append(getName()).append("(_gui_row_id_"); for (Column c : getColumns()) { sql.append(","); sql.append(c.getName()); } sql.append(") values ("); sql.append(row.getKey()); for (Column c : getColumns()) { sql.append(","); Value v = row.getValue(c.getColumnId()); if (v == null) { sql.append("DEFAULT"); } else { sql.append(v.getSQL()); } } sql.append(")"); Prepared prepared = session.prepare(sql.toString(), true); prepared.setLocal(false); prepared.update(); }
public GlobalUniqueIndex( Session session, MVTable table, int id, String indexName, IndexColumn[] columns, IndexType indexType) { initIndexBase(table, id, indexName, columns, indexType); if (!database.isStarting()) { checkIndexColumnTypes(columns); } StatementBuilder sql = new StatementBuilder("create "); if (table.isGlobalTemporary()) sql.append("global temporary "); else if (table.isTemporary()) sql.append("local temporary "); sql.append("table if not exists ").append(getName()).append("(_gui_row_id_ long,"); for (Column c : getColumns()) { sql.append(c.getCreateSQL()).append(","); } sql.append("primary key("); for (Column c : getColumns()) { sql.appendExceptFirst(","); sql.append(c.getName()); } sql.append("))"); Prepared prepared = session.prepare(sql.toString(), true); prepared.setLocal(true); prepared.update(); }
@Override public void rename(String newName) { StatementBuilder sql = new StatementBuilder("alter table "); sql.append(getName()).append(" rename to").append(newName); Prepared prepared = getDatabase().getSystemSession().prepare(sql.toString(), true); prepared.setLocal(true); prepared.update(); }
private void merge(Row row) { ArrayList<Parameter> k = update.getParameters(); for (int i = 0; i < columns.length; i++) { Column col = columns[i]; Value v = row.getValue(col.getColumnId()); Parameter p = k.get(i); p.setValue(v); } for (int i = 0; i < keys.length; i++) { Column col = keys[i]; Value v = row.getValue(col.getColumnId()); if (v == null) { throw DbException.get(ErrorCode.COLUMN_CONTAINS_NULL_VALUES_1, col.getSQL()); } Parameter p = k.get(columns.length + i); p.setValue(v); } int count = update.update(); if (count == 0) { try { table.validateConvertUpdateSequence(session, row); boolean done = table.fireBeforeRow(session, null, row); if (!done) { table.lock(session, true, false); table.addRow(session, row); session.log(table, UndoLogRecord.INSERT, row); table.fireAfterRow(session, null, row, false); } } catch (DbException e) { if (e.getErrorCode() == ErrorCode.DUPLICATE_KEY_1) { // possibly a concurrent merge or insert Index index = (Index) e.getSource(); if (index != null) { // verify the index columns match the key Column[] indexColumns = index.getColumns(); boolean indexMatchesKeys = false; if (indexColumns.length <= keys.length) { for (int i = 0; i < indexColumns.length; i++) { if (indexColumns[i] != keys[i]) { indexMatchesKeys = false; break; } } } if (indexMatchesKeys) { throw DbException.get(ErrorCode.CONCURRENT_UPDATE_1, table.getName()); } } } throw e; } } else if (count != 1) { throw DbException.get(ErrorCode.DUPLICATE_KEY_1, table.getSQL()); } }
@Override public void remove(Session session, Row row) { StatementBuilder sql = new StatementBuilder("delete from "); sql.append(getName()); if (row != null) { sql.append(" where "); for (Column c : getColumns()) { sql.appendExceptFirst(" and "); sql.append(c.getName()).append("="); Value v = row.getValue(c.getColumnId()); if (v != null) { sql.append(v.getSQL()); } } } Prepared prepared = session.prepare(sql.toString(), true); prepared.setLocal(false); prepared.update(); }
@Override public void truncate(Session session) { Prepared prepared = session.prepare("truncate table " + getName(), true); prepared.setLocal(true); prepared.update(); }
@Override public void remove(Session session) { Prepared prepared = session.prepare("drop table if exists " + getName(), true); prepared.setLocal(true); prepared.update(); }