Ejemplo n.º 1
0
        public void InsertManyEmpty()
        {
            var objs = new List <MyModel>();

            var q = Builders <MyModel> .Insert()
                    .UseField(x => x.Id)
                    .UseField(x => x.Name)
                    .AddMany(objs);

            Utils.AssertRawQuery(q, @"SELECT 0");
        }
Ejemplo n.º 2
0
        public void InsertEasy()
        {
            var obj = new MyModel {
                Name = "A"
            };

            var q = Builders <MyModel> .Insert(obj)
                    .UseField(x => x.Name);

            Utils.AssertRawQuery(q, @"INSERT INTO model(""name"") VALUES ('A') RETURNING ""id"";");
        }
Ejemplo n.º 3
0
        public void InsertEnumSchema()
        {
            var obj = new MyModel {
                Enum2 = MyEnum2.A,
            };

            var q = Builders <MyModel> .Insert()
                    .UseField(x => x.Enum2)
                    .AddObject(obj);

            Utils.AssertRawQuery(q, @"INSERT INTO model(enum2) VALUES ('A') RETURNING ""id"";");
        }
Ejemplo n.º 4
0
        public void InsertOnConflictDoNothing()
        {
            var obj = new MyModel {
                Id = 4
            };

            var q = Builders <MyModel> .Insert()
                    .UseField(x => x.Id)
                    .AddObject(obj)
                    .OnConflictDoNothing();

            Utils.AssertRawQuery(q, @"INSERT INTO model(""id"") VALUES (4) ON CONFLICT DO NOTHING RETURNING ""id"";");
        }
Ejemplo n.º 5
0
        public void InsertRefId()
        {
            var obj = new MyModel2 {
                Name1 = "A"
            };

            var q = Builders <MyModel2> .Insert(obj)
                    .UseField(x => x.Name1)
                    .UsePreviousInsertId <MyModel>(x => x.ModelId, x => x.Id);

            Utils.AssertRawQuery(q, @"INSERT INTO ""public"".model2(name1,model_id) 
                                              VALUES ('A',currval(pg_get_serial_sequence('model','id')))
                                              RETURNING ""id"";");
        }
Ejemplo n.º 6
0
        public void InsertIntoVariable()
        {
            var obj = new MyModel2 {
                Name1 = "A"
            };

            var q = Builders <MyModel2> .Insert(obj)
                    .UseField(x => x.Name1)
                    .IntoVariable("insert_id1");

            Utils.AssertRawQuery(q, @"INSERT INTO ""public"".model2(name1) 
                                              VALUES ('A')
                                              RETURNING ""id"";
                                              SELECT set_config('vars.insert_id1', lastval()::text, true);");
        }
Ejemplo n.º 7
0
        public void InsertOnConflictUpdate()
        {
            var obj = new MyModel {
                Id = 4
            };

            var q = Builders <MyModel> .Insert()
                    .UseField(x => x.Id)
                    .AddObject(obj)
                    .OnConflictDoUpdate(x => x.AddField(y => y.Enum).AddField(y => y.Id),
                                        x => x.SetField(y => y.Name, "a")
                                        .UnsetField(y => y.Bool));

            Utils.AssertRawQuery(q, @"INSERT INTO model(""id"") VALUES (4) ON CONFLICT (""enum"", ""id"") DO UPDATE SET ""name"" = 'a', bool = NULL RETURNING ""id"";");
        }
Ejemplo n.º 8
0
        public void InsertDateTime()
        {
            var date = DateTime.Parse("2018-01-01 12:34");

            var obj = new MyModel {
                DateTime = date,
            };

            var q = Builders <MyModel> .Insert()
                    .UseField(x => x.DateTime)
                    .AddObject(obj);

            Utils.AssertRawQuery(q, @"INSERT INTO model(datetime) VALUES (@1::timestamp) RETURNING ""id"";",
                                 new Param(date, NpgsqlDbType.Timestamp));
        }
Ejemplo n.º 9
0
        public void InsertWithSubqueryOptional()
        {
            var subq = Builders <MyModel> .Select(x => x.Id)
                       .Where(x => x.Name == "subtest4")
                       .AsSubquery();


            var obj = new MyModel2 {
            };

            var q = Builders <MyModel2> .Insert(obj)
                    .UseField(x => x.ModelId, subq);

            Utils.AssertRawQuery(q, @"INSERT INTO ""public"".model2(model_id) 
                                              VALUES ((SELECT ""id"" FROM model WHERE (""name"") = ('subtest4')))
                                              RETURNING ""id"";");
        }
Ejemplo n.º 10
0
        public void InsertWithSubquery()
        {
            var subq = Builders <MyModel> .Select(x => x.Name)
                       .Where(x => x.Id == 1)
                       .AsSubquery();


            var obj = new MyModel2 {
            };

            var q = Builders <MyModel2> .Insert(obj)
                    .UseField(x => x.Name1, subq);

            Utils.AssertRawQuery(q, @"INSERT INTO ""public"".model2(name1) 
                                              VALUES ((SELECT ""name"" FROM model WHERE (""id"") = (1)))
                                              RETURNING ""id"";");
        }
Ejemplo n.º 11
0
        public void InsertSingle()
        {
            var obj = new MyModel {
                Id        = 4,
                ValFloat  = 1.23f,
                ValDouble = 1.2345,
            };

            var q = Builders <MyModel> .Insert()
                    .UseField(x => x.Id)
                    .UseField(x => x.ValFloat)
                    .UseField(x => x.ValDouble)
                    .AddObject(obj);

            Utils.AssertRawQuery(q, @"INSERT INTO model(""id"",val_f32,val_f64) VALUES (4,@1::real,@2::double precision) RETURNING ""id"";",
                                 new Param(1.23f, NpgsqlDbType.Real),
                                 new Param(1.2345, NpgsqlDbType.Double));
        }
Ejemplo n.º 12
0
        public void InsertList()
        {
            var obj = new MyModel {
                ListEnum = new List <MyEnum>()
                {
                    MyEnum.A, MyEnum.C
                },
                ListString = new List <string>()
                {
                    "A", "B"
                },
            };

            var q = Builders <MyModel> .Insert()
                    .UseField(x => x.ListEnum)
                    .UseField(x => x.ListString)
                    .AddObject(obj);

            Utils.AssertRawQuery(q, @"INSERT INTO model(list_enum,list_string) VALUES (@1::""enum""[],@2::text[]) RETURNING ""id"";",
                                 new Param(new[] { "A", "C" }, NpgsqlDbType.Array | NpgsqlDbType.Text),
                                 new Param(new[] { "A", "B" }, NpgsqlDbType.Array | NpgsqlDbType.Text));
        }
Ejemplo n.º 13
0
        public void InsertMany()
        {
            var objs = new List <MyModel>()
            {
                new MyModel()
                {
                    Id   = 1,
                    Name = "A",
                },
                new MyModel()
                {
                    Id   = 2,
                    Name = "B",
                },
            };

            var q = Builders <MyModel> .Insert()
                    .UseField(x => x.Id)
                    .UseField(x => x.Name)
                    .AddMany(objs);

            Utils.AssertRawQuery(q, @"INSERT INTO model(""id"",""name"") VALUES (1,'A'),(2,'B') RETURNING ""id"";");
        }
Ejemplo n.º 14
0
        public void TypeDateTime()
        {
            var date = DateTime.Parse("2018-01-01 12:34");

            var exp = NodeVisitor.VisitFuncExpression <MyModel>(x => x.DateTime == date);

            Utils.AssertExpression(exp, @"(datetime) = (@1::timestamp)",
                                   new Param(date, NpgsqlDbType.Timestamp));

            var q1 = Builders <MyModel> .Insert(new MyModel()
            {
                DateTime = date,
            })
                     .UseField(x => x.DateTime);

            Utils.AssertRawQuery(q1, @"INSERT INTO model(datetime) VALUES (@1::timestamp) RETURNING ""id"";",
                                 new Param(date, NpgsqlDbType.Timestamp));

            var q2 = Builders <MyModel> .Update()
                     .SetField(x => x.DateTime, date);

            Utils.AssertRawQuery(q2, @"UPDATE model SET datetime = @1::timestamp",
                                 new Param(date, NpgsqlDbType.Timestamp));
        }