Ejemplo n.º 1
0
  void doInsertAt(long rowIndex, Value[] values) throws DriverException {
    // Check value count
    int fc = getFieldCount();
    if (values.length != fc) {
      throw new IllegalArgumentException("Wrong number of values. Expected: " + fc);
    }

    // Convert value
    for (int i = 0; i < values.length; i++) {
      Type type = getMetadata().getFieldType(i);
      values[i] = castValue(type, values[i]);
    }

    // Check constraints
    for (int i = 0; i < values.length; i++) {
      // Check uniqueness
      checkConstraints(values[i], i);
    }

    // Perform modifications
    dirty = true;
    insertInIndex(values, (int) rowIndex);
    PhysicalRowAddress dir = internalBuffer.insertRow(null, values);
    rowsAddresses.add((int) rowIndex, dir);
    InsertEditionInfo iei = new InsertEditionInfo(dir);
    editionActions.add((int) rowIndex, iei);
    cachedScope = null;

    editionListenerSupport.callInsert(rowIndex, undoRedo);
  }
Ejemplo n.º 2
0
  ModifyCommand.ModifyInfo doSetFieldValue(long row, int fieldId, Value value)
      throws DriverException {
    // convert value
    Value val = value;
    if (val == null) {
      val = ValueFactory.createNullValue();
    }

    // write check
    checkConstraints(val, fieldId);

    // Do modification
    ModifyCommand.ModifyInfo ret;
    PhysicalRowAddress dir = rowsAddresses.get((int) row);
    dirty = true;
    setFieldValueInIndex((int) row, fieldId, getFieldValue(row, fieldId), val);
    if (dir instanceof OriginalRowAddress) {
      Value[] original = getOriginalRow(dir);
      Value previousValue = original[fieldId];
      original[fieldId] = val;
      PhysicalRowAddress newAddress = internalBuffer.insertRow(dir.getPK(), original);
      rowsAddresses.set((int) row, newAddress);
      UpdateEditionInfo info = new UpdateEditionInfo(dir.getPK(), rowsAddresses.get((int) row));
      EditionInfo ei = editionActions.set((int) row, info);
      ret =
          new ModifyCommand.ModifyInfo(
              (OriginalRowAddress) dir,
              ei,
              (InternalBufferRowAddress) newAddress,
              previousValue,
              row,
              fieldId);
    } else {
      Value previousValue = dir.getFieldValue(fieldId);
      ((InternalBufferRowAddress) dir).setFieldValue(fieldId, val);
      /*
       * We don't modify the EditionInfo because is an insertion that
       * already points to the internal buffer
       */
      ret =
          new ModifyCommand.ModifyInfo(
              null, null, (InternalBufferRowAddress) dir, previousValue, row, fieldId);
    }
    cachedScope = null;

    editionListenerSupport.callSetFieldValue(row, fieldId, undoRedo);

    return ret;
  }
Ejemplo n.º 3
0
  DelFieldCommand.DelFieldInfo doRemoveField(int index) throws DriverException {
    if (getFields().get(index).getType().isRemovable()) {
      dirty = true;

      Field toDelete = getFields().get(index);

      if (toDelete.getOriginalIndex() != -1) {
        fieldsToDelete.add(toDelete.getName());
      }

      Value[] values = internalBuffer.removeField(index);
      getFields().remove(index);
      mdels.callRemoveField(index);

      try {
        return new DelFieldCommand.DelFieldInfo(getDataSourceFactory(), index, toDelete, values);
      } catch (IOException e) {
        throw new DriverException(e);
      }
    } else {
      throw new DriverException("The field cannot be deleted");
    }
  }
Ejemplo n.º 4
0
 void undoDeleteField(int fieldIndex, Field field, Value[] values) throws DriverException {
   getFields().add(fieldIndex, field);
   fieldsToDelete.remove(field.getName());
   internalBuffer.restoreField(fieldIndex, values);
   mdels.callAddField(fieldIndex);
 }
Ejemplo n.º 5
0
 void undoAddField() throws DriverException {
   int fieldCount = getFields().size() - 1;
   internalBuffer.removeField(fieldCount);
   getFields().remove(fieldCount);
   mdels.callRemoveField(fieldCount);
 }
Ejemplo n.º 6
0
 void doAddField(String name, Type driverType) throws DriverException {
   dirty = true;
   internalBuffer.addField();
   getFields().add(new Field(-1, name, driverType));
   mdels.callAddField(getFields().size() - 1);
 }