getCreateTableExpression static method

String getCreateTableExpression(
  1. String tableName,
  2. List<Column> columns
)

Implementation

static String getCreateTableExpression(
    String tableName, List<Column> columns) {
  List<String> columnsQueryExpressions = [];
  List<String> referencedCreateTableExpressions = [];
  List<String> foreignKeyContraints = [];
  columns.forEach((column) {
    if (column.relation?.relationType != RelationType.OneToMany) {
      columnsQueryExpressions.add(column.columnQueryExpresion);
    }

    if (column.relation != null &&
        column.relation?.relationType == RelationType.ManyToOne) {
      referencedCreateTableExpressions.add(
          QueryExpression.getCreateTableExpression(
              column.relation!.referencedEntity!.tableName,
              column.relation!.referencedEntityColumns as List<Column>));

      foreignKeyContraints.add(
          QueryExpression.getForeignKeyConstrainExpression(
              foreignColumn: column.name as String,
              referencedColumn: column.relation!.referencedColumn as String,
              referencedTable: column.relation!.referencedEntity!.tableName));
    }
  });

  final String columnsQueryExpression = columnsQueryExpressions.join(', ');
  final String foreignKeyExpression = foreignKeyContraints.length > 0
      ? ', ' + foreignKeyContraints.join(', ')
      : '';
  final String referencedTableExpression =
      referencedCreateTableExpressions.length > 0
          ? referencedCreateTableExpressions.join(';') + ';'
          : '';

  return '${referencedTableExpression}CREATE TABLE IF NOT EXISTS $tableName ($columnsQueryExpression$foreignKeyExpression)';
}