toPgSqlFragment method

String toPgSqlFragment()

Implementation

String toPgSqlFragment() {
  String type;
  switch (columnType) {
    case ColumnType.bigint:
      type = 'bigint';
      break;
    case ColumnType.boolean:
      type = 'boolean';
      break;
    case ColumnType.bytea:
      type = 'bytea';
      break;
    case ColumnType.doublePrecision:
      type = 'double precision';
      break;
    case ColumnType.integer:
      type = 'integer';
      break;
    case ColumnType.json:
      type = 'json';
      break;
    case ColumnType.text:
      type = 'text';
      break;
    case ColumnType.timestampWithoutTimeZone:
      type = 'timestamp without time zone';
      break;
    case ColumnType.uuid:
      type = 'uuid';
      break;
    case ColumnType.vector:
      type = 'vector(${vectorDimension!})';
      break;
    case ColumnType.halfvec:
      type = 'halfvec(${vectorDimension!})';
      break;
    case ColumnType.sparsevec:
      type = 'sparsevec(${vectorDimension!})';
      break;
    case ColumnType.bit:
      type = 'bit(${vectorDimension!})';
      break;
    case ColumnType.unknown:
      throw (const FormatException('Unknown column type'));
  }

  var nullable = isNullable ? '' : ' NOT NULL';
  var defaultValue = columnDefault != null ? ' DEFAULT $columnDefault' : '';

  // The id column is special.
  if (isIdColumn) {
    if (isNullable) {
      throw const FormatException('The id column must be non-nullable');
    }

    if (isIntSerialIdColumn) {
      type = 'bigserial';
      defaultValue = '';
    }

    type = '$type PRIMARY KEY';
    nullable = '';
  }

  return '"$name" $type$nullable$defaultValue';
}