예제 #1
0
        public void testOffsetOnly()
        {
            var expected =
                "select * from ( select temp_.*, rownum esp_rownumber_ from ( select * from emp order by emp.id ) temp_ ) where esp_rownumber_ > 5";
            var transformer = new OraclePagingTransformer(5, -1, null);
            var parser      = new DomaSqlParser("select * from emp order by emp.id");
            var node        = transformer.Transform(parser.Parse());
            var parameters  = new List <ParameterEmulator>();
            var builder     = new DomaSqlBuilder(node, parameters, _config);
            var result      = builder.Build();

            result.ParsedSql.Is(expected);
        }
예제 #2
0
        public void testLimitOnly()
        {
            var expected =
                "select * from ( select temp_.*, row_number() over( order by temp_.id ) as esp_rownumber_ from ( select emp.id from emp ) as temp_ ) as temp2_ where esp_rownumber_ <= 10";
            var transformer = new StandardPagingTransformer(-1, 10, null);
            var parser      = new DomaSqlParser("select emp.id from emp order by emp.id");
            var node        = transformer.Transform(parser.Parse());
            var parameters  = new List <ParameterEmulator>();
            var builder     = new DomaSqlBuilder(node, parameters, _config);
            var result      = builder.Build();

            result.ParsedSql.Is(expected);
        }
        public void testOffsetLimit_option()
        {
            var expected =
                "select emp.id from emp order by emp.id  offset 5 rows fetch next 10 rows only option (maxrecursion 0)";
            var transformer = new MssqlPagingTransformer(5, 10, false, null);
            var parser      = new DomaSqlParser("select emp.id from emp order by emp.id option (maxrecursion 0)");
            var node        = transformer.Transform(parser.Parse());
            var parameters  = new List <ParameterEmulator>();
            var builder     = new DomaSqlBuilder(node, parameters, _config);
            var result      = builder.Build();

            result.ParsedSql.Is(expected);
        }
예제 #4
0
        public void testLiteralVariable_endsWithLiteralVariableComment()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = "hoge"
            });
            var testSql = "select * from aaa where ename = /*^name*/";
            var parser  = new DomaSqlParser(testSql);
            var ex      = Assert.Throws <SqlParseException>(() => parser.Parse());

            ex.MessageId.Is(ExceptionMessageId.Esp2110);
        }
예제 #5
0
        public void testIf_selectClause()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "type", ParameterType = typeof(string), ParameterValue = "a"
            });
            var testSql = "select /*%if type == \"a\"*/aaa /*%else*/ bbb /*%end*/from ccc";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select aaa from ccc");
            result.DebugSql.Is("select aaa from ccc");
        }
예제 #6
0
        public void testIf_removeWhere()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = null
            });
            var testSql = "select * from aaa where /*%if name != null*/bbb = /*name*/'ccc' /*%end*/";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa");
            result.DebugSql.Is("select * from aaa");
        }
예제 #7
0
        public void testSelectNullLiteral()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = null
            });
            var testSql = "select /*^ name */'dummy' AS UserName";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select null AS UserName");
            result.DebugSql.Is("select null AS UserName");
            result.DbDataParameters.Count.Is(0);
        }
예제 #8
0
        public void testBindVariable_in_empty_iterable()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string[]), ParameterValue = new List <string>().ToArray()
            });
            var testSql = "select * from aaa where ename in /*name*/('aaa', 'bbb')";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where ename in (null)");
            result.DebugSql.Is("select * from aaa where ename in (null)");
            result.DbDataParameters.Count.Is(0);
        }
예제 #9
0
        public void testBindVariable_EndsWith()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = "hoge"
            });
            var testSql = "select * from aaa where ename like /* @EndsWith(name)*/'aaa'";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where ename like @name");
            result.DebugSql.Is("select * from aaa where ename like '%hoge'");
            result.DbDataParameters.Count.Is(1);
            result.DbDataParameters[0].Value.Is("%hoge");
        }
예제 #10
0
        public void testParens_removeAnd()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = null
            });
            var testSql =
                "select * from aaa where (\n/*%if name != null*/bbb = /*name*/\'ccc\'\n/*%else*/\nand ddd is null\n /*%end*/)";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where (\n\n ddd is null\n )");
            result.DebugSql.Is("select * from aaa where (\n\n ddd is null\n )");
            result.DbDataParameters.Count.Is(0);
        }
예제 #11
0
        public void testIf_nest()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = "hoge"
            });
            var testSql =
                "select * from aaa where /*%if name != null*/bbb = /*name*/\'ccc\' /*%if name == \"hoge\"*/and ddd = eee/*%end*//*%end*/";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where bbb = @name and ddd = eee");
            result.DebugSql.Is("select * from aaa where bbb = 'hoge' and ddd = eee");
            result.DbDataParameters.Count.Is(1);
        }
예제 #12
0
        public void testElseifBlock()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = ""
            });
            var testSql =
                "select * from aaa where /*%if name == null*/bbb is null\n/*%elseif name ==\"\"*/\nbbb = /*name*/\'ccc\'/*%end*/";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where \nbbb = @name");
            result.DebugSql.Is("select * from aaa where \nbbb = ''");
            result.DbDataParameters.Count.Is(1);
            result.DbDataParameters[0].Value.Is("");
        }
예제 #13
0
        public void testUpdateNullString()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = null
            });
            var testSql = "update employee set name = /* name */'dummy'";

            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("update employee set name = @name");
            result.DebugSql.Is("update employee set name = null");
            result.DbDataParameters.Count.Is(1);
            result.DbDataParameters[0].Value.Is(DBNull.Value);
        }
예제 #14
0
        public void testUpdateNullDateTime()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "birthdate", ParameterType = typeof(DateTime?), ParameterValue = null
            });
            var testSql = "update employee set birthdate = /* @TruncateTime(birthdate) */'2001-01-01'";

            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("update employee set birthdate = @birthdate");
            result.DebugSql.Is("update employee set birthdate = null");
            result.DbDataParameters.Count.Is(1);
            result.DbDataParameters[0].Value.Is(DBNull.Value);
        }
예제 #15
0
        public void testBindVariable_TruncateTime()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name           = "birthDate", ParameterType = typeof(DateTime),
                ParameterValue = new DateTime(1999, 9, 9, 10, 20, 30)
            });
            var testSql = "select * from aaa where birthDate > /* @TruncateTime(birthDate) */'1999-10-12'";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where birthDate > @birthDate");
            result.DebugSql.Is("select * from aaa where birthDate > '1999-09-09'");
            result.DbDataParameters.Count.Is(1);
            result.DbDataParameters[0].Value.Is(new DateTime(1999, 9, 9));
        }
예제 #16
0
        public void testBindVariable_in()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string[]), ParameterValue = new[] { "hoge", "foo" }
            });
            var testSql = "select * from aaa where ename in /*name*/('aaa', 'bbb')";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where ename in (@name1, @name2)");
            result.DebugSql.Is("select * from aaa where ename in ('hoge', 'foo')");
            result.DbDataParameters.Count.Is(2);
            result.DbDataParameters[0].Value.Is("hoge");
            result.DbDataParameters[1].Value.Is("foo");
        }
예제 #17
0
        public void testLiteralVariable()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = "hoge"
            });
            parameters.Add(new ParameterEmulator
            {
                Name = "salary", ParameterType = typeof(int), ParameterValue = 10000
            });
            var testSql = "select * from aaa where ename = /*^name*/'aaa' and sal = /*^salary*/-2000";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where ename = 'hoge' and sal = 10000");
            result.DebugSql.Is("select * from aaa where ename = 'hoge' and sal = 10000");
            result.DbDataParameters.Count.Is(0);
        }
예제 #18
0
        public void testIf_nestContinuously()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(string), ParameterValue = "hoge"
            });
            parameters.Add(new ParameterEmulator
            {
                Name = "name2", ParameterType = typeof(string), ParameterValue = null
            });
            var testSql =
                "select * from aaa where /*%if name != null*//*%if name2 == \"hoge\"*/ ddd = eee/*%end*//*%end*/";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa");
            result.DebugSql.Is("select * from aaa");
            result.DbDataParameters.Count.Is(0);
        }
예제 #19
0
        public void testBindVariable_enum()
        {
            var parameters = new List <ParameterEmulator>();

            parameters.Add(new ParameterEmulator
            {
                Name = "name", ParameterType = typeof(MyEnum), ParameterValue = MyEnum.BBB
            });
            parameters.Add(new ParameterEmulator
            {
                Name = "salary", ParameterType = typeof(int), ParameterValue = 10000
            });
            var testSql = "select * from aaa where ename = /*name*/'aaa' and sal = /*salary*/-2000";
            var parser  = new DomaSqlParser(testSql);
            var node    = parser.Parse();
            var builder = new DomaSqlBuilder(node, parameters);
            var result  = builder.Build();

            result.ParsedSql.Is("select * from aaa where ename = @name and sal = @salary");
            result.DebugSql.Is("select * from aaa where ename = 'BBB' and sal = 10000");
            result.DbDataParameters.Count.Is(2);
            result.DbDataParameters[0].Value.Is(MyEnum.BBB);
            result.DbDataParameters[1].Value.Is(10000);
        }
예제 #20
0
        public void testOrderByClauseUnspecified()
        {
            var transformer = new StandardPagingTransformer(5, 10, null);
            var parser      = new DomaSqlParser("select * from emp");
            var ex          = Assert.Throws <SqlTransformException>(() => transformer.Transform(parser.Parse()));

            ex.IsNotNull();
            ex.MessageId.Is(ExceptionMessageId.Esp2201);
        }