Esempio n. 1
0
 /// <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));
 }
Esempio n. 2
0
 internal PgAlterTableContext(PgDatabaseInstance database, TableDefinition table)
 {
     Database = database;
     Table    = table;
 }
Esempio n. 3
0
        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;
                    }
                }
            }
        }