createTableStatementForModel method

String createTableStatementForModel(
  1. ModelDefinition model, {
  2. SchemaDocument? schema,
})

Returns a table creation statement for model.

Implementation

String createTableStatementForModel(
  ModelDefinition model, {
  SchemaDocument? schema,
}) {
  final definitions = <String>[];
  final hasModelLevelPrimaryKey = model.primaryKeyFields.isNotEmpty;

  for (final field in model.fields.where(
    (field) => _isScalarLikeField(schema, field) && !field.isList,
  )) {
    definitions.add(
      _columnDefinition(
        field,
        schema: schema,
        includeInlinePrimaryKey: !hasModelLevelPrimaryKey,
      ),
    );
  }

  for (final field in model.fields.where(
    (field) => !_isScalarLikeField(schema, field),
  )) {
    final foreignKey = foreignKeyConstraintDefinitionForModel(
      model,
      field,
      schema: schema,
    );
    if (foreignKey != null) {
      definitions.add(foreignKey);
    }
  }

  if (hasModelLevelPrimaryKey) {
    definitions.add(
      'PRIMARY KEY (${_quotedConstraintColumns(model, model.primaryKeyFields).join(', ')})',
    );
  }

  for (final uniqueFields in model.compoundUniqueFieldSets) {
    if (uniqueFields.length <= 1) {
      continue;
    }
    definitions.add(
      'UNIQUE (${_quotedConstraintColumns(model, uniqueFields).join(', ')})',
    );
  }

  return 'CREATE TABLE IF NOT EXISTS ${_quoteIdentifier(model.databaseName)} ('
      '${definitions.join(', ')}'
      ')';
}