process method

List<AnalysisError> process(
  1. Statement statement
)

Interpret the schema against the schema managed in this buffer.

CREATE statements will add new elements, DROP statements will remove them. ALTER TABLE statements are handled by patching the existing CREATE TABLE statement affected by it.

Returns analysis errors if the statement can't be applied (e.g. because it attempts to create a table that already exists).

Implementation

List<AnalysisError> process(Statement statement) {
  final errors = <AnalysisError>[];

  switch (statement) {
    case final AlterTableStatement alterTable:
      if (_currentElements[alterTable.table.tableName]
          case final _TableSchemaElement table?) {
        _applyAlterTable(errors, alterTable.instruction, table);
      } else {
        errors.add(
          AnalysisError(
            type: AnalysisErrorType.referencedUnknownTable,
            relevantNode: alterTable.table,
          ),
        );
      }

    case final CreateTableStatement createTable:
      _defineNew(errors, DropType.table, createTable);
    case final CreateTriggerStatement createTrigger:
      _defineNew(errors, DropType.trigger, createTrigger);
    case final CreateIndexStatement createIndex:
      _defineNew(errors, DropType.$index, createIndex);
    case final CreateViewStatement createView:
      _defineNew(errors, DropType.view, createView);
    case final DropStatement drop:
      _drop(errors, drop);
    default:
    // Not a statement affecting the schema, ignore.
  }

  return errors;
}