Example #1
0
     public PgSqlDialect(PgDbDriver driver) : base(driver)
     {
         base.MaxParamCount             = 32000; //reported also 65K
         base.OffsetTemplate            = new SqlTemplate(" OFFSET {0} ");
         base.OffsetLimitTemplate       = new SqlTemplate(" LIMIT {1} OFFSET {0} ");
         base.DynamicSqlParameterPrefix = "@P";
         base.BatchBeginTransaction     = new TextSqlFragment("START TRANSACTION;");
         base.BatchCommitTransaction    = new TextSqlFragment("COMMIT;");
         // we are using ANY instead of IN, works for parameters and list literals
         base.SqlCrudTemplateDeleteMany = new SqlTemplate(
             @"DELETE FROM {0} 
 WHERE {1} = ANY({2})");
     }
Example #2
0
        public PgTypeRegistry(PgDbDriver driver)  : base(driver)
        {
            AddType("real", DbType.Single, typeof(Single), NpgsqlDbType.Real);
            AddType("double precision", DbType.Double, typeof(Double), NpgsqlDbType.Double);
            AddType("numeric", DbType.Decimal, typeof(Decimal), NpgsqlDbType.Numeric, args: "({precision},{scale})");
            //Just to handle props marked with DbType=DbType.Currency
            AddType("money", DbType.Currency, typeof(Decimal), NpgsqlDbType.Money, isDefault: false, valueToLiteral: NumToLiteralWithCast);

            //integers
            // Note: We have to provide explicit cast for certain int and currency types; otherwise, function overload resolution does not match the intended function
            // (it works by function name and arg types match). Quite annoying.
            AddType("int", DbType.Int32, typeof(int), NpgsqlDbType.Integer, aliases: "integer,oid", clrTypes: new Type[] { typeof(UInt16) });
            AddType("smallint", DbType.Int16, typeof(Int16), NpgsqlDbType.Smallint, clrTypes: new Type[] { typeof(byte), typeof(sbyte) }, valueToLiteral: NumToLiteralWithCast);
            AddType("bigint", DbType.Int64, typeof(Int64), NpgsqlDbType.Bigint, clrTypes: new Type[] { typeof(UInt32), typeof(UInt64) }, valueToLiteral: NumToLiteralWithCast);
            //AddType("serial", DbType.Int32, typeof(Int32), NpgsqlDbType ??);

            // Bool
            AddType("boolean", DbType.Boolean, typeof(bool), NpgsqlDbType.Boolean);
            //Bit
            //TODO: finish Bit data types : http://www.postgresql.org/docs/8.4/static/datatype-bit.html

            // Strings
            AddType("character varying", DbType.String, typeof(string), NpgsqlDbType.Varchar, args: "({size})");
            AddType("character", DbType.StringFixedLength, typeof(string), NpgsqlDbType.Char, args: "({size})",
                    isDefault: false, clrTypes: new Type[] { typeof(char) }, aliases: "char");
            AddType("text", DbType.String, typeof(string), NpgsqlDbType.Text, supportsMemo: true, isDefault: false);
            // Datetime
            AddType("timestamp without time zone", DbType.DateTime, typeof(DateTime), NpgsqlDbType.Timestamp);
            AddType("timestamp with time zone", DbType.Date, typeof(DateTimeOffset), NpgsqlDbType.TimestampTZ);
            AddType("date", DbType.Date, typeof(DateTime), NpgsqlDbType.Date, isDefault: false, aliases: "date without time zone");
            AddType("time", DbType.Time, typeof(TimeSpan), NpgsqlDbType.Time, aliases: "time without time zone");
            AddType("interval", DbType.Object, typeof(TimeSpan), NpgsqlDbType.Interval, isDefault: false);

            // Binaries
            // Note: Postgres has special way of presenting binary blobs, so we provide special BytesToLiteral converter
            var binTypes = new Type[] { typeof(Vita.Common.Binary) };

            AddType("bytea", DbType.Binary, typeof(byte[]), NpgsqlDbType.Bytea, supportsMemo: true, clrTypes: binTypes, valueToLiteral: BytesToLiteral);
            AddType("array", DbType.Binary, typeof(byte[]), NpgsqlDbType.Array, isDefault: false, clrTypes: binTypes, valueToLiteral: BytesToLiteral);

            // Guid
            AddType("uuid", DbType.Guid, typeof(Guid), NpgsqlDbType.Uuid);
        }
Example #3
0
        public PgTypeRegistry(PgDbDriver driver)
            : base(driver)
        {
            AddType("real", DbType.Single, typeof(Single), NpgsqlDbType.Real);
              AddType("double precision", DbType.Double, typeof(Double), NpgsqlDbType.Double);
              AddType("numeric", DbType.Decimal, typeof(Decimal), NpgsqlDbType.Numeric, args: "({precision},{scale})");
              //Just to handle props marked with DbType=DbType.Currency
              AddType("money", DbType.Currency, typeof(Decimal), NpgsqlDbType.Money, isDefault: false, valueToLiteral: NumToLiteralWithCast);

              //integers
              // Note: We have to provide explicit cast for certain int and currency types; otherwise, function overload resolution does not match the intended function
              // (it works by function name and arg types match). Quite annoying.
              AddType("int", DbType.Int32, typeof(int), NpgsqlDbType.Integer, aliases: "integer", clrTypes: new Type[] { typeof(UInt16) });
              AddType("smallint", DbType.Int16, typeof(Int16), NpgsqlDbType.Smallint, clrTypes: new Type[] { typeof(byte), typeof(sbyte) }, valueToLiteral: NumToLiteralWithCast);
              AddType("bigint", DbType.Int64, typeof(Int64), NpgsqlDbType.Bigint, clrTypes: new Type[] { typeof(UInt32), typeof(UInt64) }, valueToLiteral: NumToLiteralWithCast);
              //AddType("serial", DbType.Int32, typeof(Int32), NpgsqlDbType ??);

              // Bool
              AddType("boolean", DbType.Boolean, typeof(bool), NpgsqlDbType.Boolean);
              //Bit
              //TODO: finish Bit data types : http://www.postgresql.org/docs/8.4/static/datatype-bit.html

              // Strings
              AddType("character varying", DbType.String, typeof(string), NpgsqlDbType.Varchar, args: "({size})");
              AddType("character", DbType.StringFixedLength, typeof(string), NpgsqlDbType.Char, args: "({size})",
            isDefault: false, clrTypes: new Type[] { typeof(char) }, aliases: "char");
              AddType("text", DbType.String, typeof(string), NpgsqlDbType.Text, supportsMemo: true, isDefault: false);
              // Datetime
              AddType("timestamp without time zone", DbType.DateTime, typeof(DateTime), NpgsqlDbType.Timestamp);
              AddType("timestamp with time zone", DbType.Date, typeof(DateTimeOffset), NpgsqlDbType.TimestampTZ);
              AddType("date", DbType.Date, typeof(DateTime), NpgsqlDbType.Date, isDefault: false, aliases: "date without time zone");
              AddType("time", DbType.Time, typeof(TimeSpan), NpgsqlDbType.Time, aliases: "time without time zone");
              AddType("interval", DbType.Object, typeof(TimeSpan), NpgsqlDbType.Interval, isDefault: false);

              // Binaries
              // Note: Postgres has special way of presenting binary blobs, so we provide special BytesToLiteral converter
              var binTypes = new Type[] { typeof(Vita.Common.Binary) };
              AddType("bytea", DbType.Binary, typeof(byte[]), NpgsqlDbType.Bytea, supportsMemo: true, clrTypes: binTypes, valueToLiteral: BytesToLiteral);
              AddType("array", DbType.Binary, typeof(byte[]), NpgsqlDbType.Array, isDefault: false, clrTypes: binTypes, valueToLiteral: BytesToLiteral);

              // Guid
              AddType("uuid", DbType.Guid, typeof(Guid), NpgsqlDbType.Uuid);
        }
Example #4
0
        public PgTypeRegistry(PgDbDriver driver)  : base(driver)
        {
            var none = new Type[] { };

            AddDbTypeDef("real", typeof(Single), aliases: "float4", providerDbType: NpgsqlDbType.Real);
            AddDbTypeDef("double precision", typeof(Double), aliases: "float8", providerDbType: NpgsqlDbType.Double);
            AddDbTypeDef("numeric", typeof(Decimal), DbTypeFlags.PrecisionScale, providerDbType: NpgsqlDbType.Numeric);
            //Just to handle props marked with DbType=DbType.Currency
            AddDbTypeDef("money", typeof(Decimal), mapColumnType: false, providerDbType: NpgsqlDbType.Money,
                         toLiteral: CreateFuncNumToLiteralWithCast("money"));

            //integers
            var tdInt = AddDbTypeDef("int", typeof(Int32), aliases: "integer,oid,int4", providerDbType: NpgsqlDbType.Integer);

            Map(typeof(UInt16), tdInt);

            var tdSmallInt = AddDbTypeDef("smallint", typeof(Int16), providerDbType: NpgsqlDbType.Smallint,
                                          toLiteral: CreateFuncNumToLiteralWithCast("smallint"));

            Map(typeof(byte), tdSmallInt);
            Map(typeof(sbyte), tdSmallInt);

            var tdBigInt = AddDbTypeDef("bigint", typeof(Int64), aliases: "int8", providerDbType: NpgsqlDbType.Bigint,
                                        toLiteral: CreateFuncNumToLiteralWithCast("bigint"));

            Map(typeof(UInt32), tdBigInt);
            Map(typeof(UInt64), tdBigInt);

            // Bool
            AddDbTypeDef("boolean", typeof(bool), providerDbType: NpgsqlDbType.Boolean);
            //Bit
            //TODO: finish Bit data types : http://www.postgresql.org/docs/8.4/static/datatype-bit.html

            // Strings
            var tdVarChar = AddDbTypeDef("character varying", typeof(string), DbTypeFlags.Size,
                                         aliases: "varchar", providerDbType: NpgsqlDbType.Varchar);

            SpecialTypeDefs[DbSpecialType.String]     = tdVarChar;
            SpecialTypeDefs[DbSpecialType.StringAnsi] = tdVarChar;

            var tdChar = AddDbTypeDef("character", typeof(string), DbTypeFlags.Size, providerDbType: NpgsqlDbType.Char);

            Map(typeof(char), tdChar, size: 1);

            var tdText = AddDbTypeDef("text", typeof(string), flags: DbTypeFlags.Unlimited, providerDbType: NpgsqlDbType.Text);

            SpecialTypeDefs[DbSpecialType.StringUnlimited]     = tdText;
            SpecialTypeDefs[DbSpecialType.StringAnsiUnlimited] = tdText;

            // Datetime
            AddDbTypeDef("timestamp without time zone", typeof(DateTime), providerDbType: NpgsqlDbType.Timestamp);
            AddDbTypeDef("timestamp with time zone", typeof(DateTimeOffset), providerDbType: NpgsqlDbType.TimestampTz);
            AddDbTypeDef("date without time zone", typeof(DateTime), mapColumnType: false, providerDbType: NpgsqlDbType.Date);
            AddDbTypeDef("time without time zone", typeof(TimeSpan), providerDbType: NpgsqlDbType.TimeTz);
            AddDbTypeDef("interval", typeof(TimeSpan), mapColumnType: false, providerDbType: NpgsqlDbType.Interval);

            // Binaries
            // Note: Postgres has special way of presenting binary blobs, so we provide special BytesToLiteral converter
            var tdByteA = AddDbTypeDef("bytea", typeof(byte[]), mapColumnType: false, providerDbType: NpgsqlDbType.Bytea,
                                       toLiteral: BytesToLiteral);

            Map(typeof(Binary), tdByteA);

            // Guid
            AddDbTypeDef("uuid", typeof(Guid), toLiteral: GuidToLiteral, providerDbType: NpgsqlDbType.Uuid);
        }