/// <summary> /// Provides a context for altering a table in the database. /// </summary> /// <param name="tableDefinition"></param> /// <returns></returns> public override AlterTableContext AlterTable(TableDefinition tableDefinition) { return(new PgAlterTableContext(this, tableDefinition)); }
internal PgAlterTableContext(PgDatabaseInstance database, TableDefinition table) { Database = database; Table = table; }
public override void CreateTable(TableDefinition tableDefinition) { var queryWriter = new StringWriter(); var delimiter = "\n\t"; queryWriter.Write("CREATE TABLE {0}.{1}", tableDefinition.Schema, tableDefinition.Name); queryWriter.Write("("); foreach (var column in tableDefinition.Columns.OrderBy(c => c.OrdinalPosition)) { queryWriter.Write(delimiter); queryWriter.Write("\"{0}\"", column.Name.ToLowerInvariant()); queryWriter.Write(" "); queryWriter.Write(GetPgsqlDataType(column)); queryWriter.Write(column.IsNullable ? " NULL" : " NOT NULL"); if (!string.IsNullOrWhiteSpace(column.Default)) { queryWriter.Write(" DEFAULT {0}", RewriteDefault(column.DataType, column.Default)); } delimiter = ",\n\t"; } if (tableDefinition.HasPrimaryKey) { queryWriter.Write(delimiter); queryWriter.Write("PRIMARY KEY ("); queryWriter.Write(string.Join(",", tableDefinition.PrimaryKey)); queryWriter.Write(")"); } queryWriter.WriteLine(); queryWriter.WriteLine(") WITH ( OIDS = FALSE ) DISTRIBUTE BY REPLICATION"); if (Logger != null) { Logger.Debug(" + {0}.{1}", tableDefinition.Schema, tableDefinition.Name); } using (var connection = CreateConnection()) { try { var command = connection.CreateCommand(); command.CommandType = CommandType.Text; command.CommandText = queryWriter.ToString(); command.ExecuteNonQuery(); } catch (NpgsqlException e) { switch (e.Code) { case "42P07": break; default: throw; } } } }