public void AddColumn(IDataContext db, IFieldDescriptor field)
        {
            if (db == null)
            {
                throw new ArgumentNullException("session");
            }

            if (field == null)
            {
                throw new ArgumentNullException("field");
            }

            var sqlType = PgSqlTypeConverter.GetSqlType(field);
            var sql     = String.Format(CultureInfo.InvariantCulture,
                                        @"alter table ""{0}"" add column ""{1}"" {2}",
                                        this.Name, field.Name, sqlType);

            db.Execute(SqlString.Parse(sql));

            this.SetColumnComment(db, field);

            if (field.IsUnique)
            {
                this.AddUniqueConstraint(db, field.Name);
            }
        }
        public void CreateTable(IDataContext db, IModelDescriptor model, string label)
        {
            if (db == null)
            {
                throw new ArgumentNullException("session");
            }

            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            var tableName = model.TableName.SqlEscape();

            LoggerProvider.EnvironmentLogger.Debug(String.Format("Creating Table [{0}]...", tableName));

            var fieldsWithoutId = model.Fields.Values.Where(f => f.IsColumn);

            var sb = new SqlStringBuilder();

            sb.Add("create table ");
            sb.Add('"' + tableName + '"');
            sb.Add("(");

            var commaNeeded = false;

            foreach (var f in fieldsWithoutId)
            {
                if (commaNeeded)
                {
                    sb.Add(", ");
                }
                commaNeeded = true;

                sb.Add('"' + f.Name + '"');
                sb.Add(" ");
                var sqlType = PgSqlTypeConverter.GetSqlType(f);
                sb.Add(sqlType);
            }

            sb.Add(") without oids");

            var sql = sb.ToSqlString();

            db.Execute(sql);

            SetTableComment(db, tableName, label);
        }