@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();
  }
Exemple #4
0
 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();
 }