twowaysql 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +12 -4
- data/Manifest.txt +5 -0
- data/README.txt +84 -12
- data/issues/issue-001c53236380a42cd8c5a9099bbcc6ec613919c2.yaml +18 -0
- data/issues/issue-25efcfc383f3b0f6c0e2730ae7c2975bb2b3de26.yaml +15 -3
- data/issues/issue-279105dd0d9f03514d318f5eab5e99c4c2d47fda.yaml +21 -0
- data/issues/issue-28cde89ed3eb306957edc90595b1d16bf43daf42.yaml +26 -0
- data/issues/issue-664986b219202ff1948cab717b56e7540f493561.yaml +5 -1
- data/issues/issue-6daccddf089d11d42bf016897da98f70cf5ab46c.yaml +18 -0
- data/issues/issue-901f65630639507c8b05b466790e9f22256c6450.yaml +15 -3
- data/issues/issue-f1bd40de5458397d9b142ea3e197e5264e0dcdbf.yaml +26 -0
- data/issues/issue-f2b773020b54f839c03d899b38b5113c8fd991df.yaml +15 -3
- data/issues/issue-f64d73ed4f9854f1ded77e6496dbf59cfb3770a7.yaml +10 -2
- data/issues/project.yaml +15 -2
- data/lib/twowaysql/node.rb +16 -6
- data/lib/twowaysql/parser.rb +115 -126
- data/lib/twowaysql/parser.y +24 -29
- data/lib/twowaysql/template.rb +26 -4
- data/lib/twowaysql/version.rb +2 -2
- data/spec/large_sql_spec.rb +67 -4
- data/spec/twowaysql_spec.rb +225 -44
- metadata +7 -2
    
        data/spec/twowaysql_spec.rb
    CHANGED
    
    | @@ -12,7 +12,7 @@ describe TwoWaySQL::Template do | |
| 12 12 | 
             
              describe "when parse SQL without comment nodes, e.g. 'SELECT * FROM emp'" do
         | 
| 13 13 | 
             
                before do
         | 
| 14 14 | 
             
                  sql = "SELECT * FROM emp"
         | 
| 15 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 15 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 16 16 | 
             
                  @result = @template.merge(@ctx)
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| @@ -30,7 +30,7 @@ describe TwoWaySQL::Template do | |
| 30 30 | 
             
              describe "when parsed from 'SELECT * FROM emp WHERE job = /*ctx[:job]*/'CLERK' AND deptno = /*ctx[:deptno]*/20'" do
         | 
| 31 31 | 
             
                before do
         | 
| 32 32 | 
             
                  sql = "SELECT * FROM emp WHERE job = /*ctx[:job]*/'CLERK' AND deptno = /*ctx[:deptno]*/20"
         | 
| 33 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 33 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 34 34 | 
             
                end
         | 
| 35 35 |  | 
| 36 36 | 
             
                describe "pass Context with Symbol keys like ctx[:job] = 'HOGE' and ctx[:deptno] = 30" do
         | 
| @@ -55,7 +55,7 @@ describe TwoWaySQL::Template do | |
| 55 55 | 
             
              describe "when parsed from 'SELECT * FROM emp WHERE job = /*ctx['job']*/'CLERK' AND deptno = /*ctx['deptno']*/20'" do
         | 
| 56 56 | 
             
                before do
         | 
| 57 57 | 
             
                  sql = "SELECT * FROM emp WHERE job = /*ctx['job']*/'CLERK' AND deptno = /*ctx['deptno']*/20"
         | 
| 58 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 58 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 59 59 | 
             
                end
         | 
| 60 60 |  | 
| 61 61 | 
             
                describe "pass Context with String keys like ctx['job'] = 'HOGE' and ctx['deptno'] = 30" do
         | 
| @@ -80,7 +80,7 @@ describe TwoWaySQL::Template do | |
| 80 80 | 
             
              describe "when parsed from 'SELECT * FROM emp WHERE job = #*ctx[:job]*#'CLERK' AND deptno = #*ctx[:deptno]*#20'" do
         | 
| 81 81 | 
             
                before do
         | 
| 82 82 | 
             
                  sql = "SELECT * FROM emp WHERE job = #*ctx[:job]*#'CLERK' AND deptno = #*ctx[:deptno]*#20"
         | 
| 83 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 83 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 84 84 |  | 
| 85 85 | 
             
                  @ctx[:job] = "HOGE"
         | 
| 86 86 | 
             
                  @ctx[:deptno] = 30
         | 
| @@ -102,22 +102,42 @@ describe TwoWaySQL::Template do | |
| 102 102 |  | 
| 103 103 |  | 
| 104 104 |  | 
| 105 | 
            -
              describe "when parsed from SQL file with one or more white speces in comment, like 'SELECT * FROM emp WHERE job = /* | 
| 106 | 
            -
                before do
         | 
| 107 | 
            -
                  sql = "SELECT * FROM emp WHERE job = /* ctx[:job]*/'CLERK'"
         | 
| 108 | 
            -
                  @template = TwoWaySQL::Template.parse(sql, :preserve_eol => false)
         | 
| 105 | 
            +
              describe "when parsed from SQL file with one or more white speces in comment, like 'SELECT * FROM emp WHERE job = /*  ctx[:job]*/'CLERK''" do
         | 
| 109 106 |  | 
| 110 | 
            -
             | 
| 111 | 
            -
                   | 
| 112 | 
            -
             | 
| 107 | 
            +
                describe "default is :peserve_comment => true" do
         | 
| 108 | 
            +
                  before do
         | 
| 109 | 
            +
                    sql = "SELECT * FROM emp WHERE job = /*  ctx[:job]*/'CLERK'"
         | 
| 110 | 
            +
                    @template = TwoWaySQL::Template.parse(sql)
         | 
| 111 | 
            +
                    @ctx[:job] = "HOGE"
         | 
| 112 | 
            +
                    @result = @template.merge(@ctx)
         | 
| 113 | 
            +
                  end
         | 
| 113 114 |  | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 115 | 
            +
                  it "should treat comment node which starts with one or more speces like /*  ctx[:job]*/'CLERK' as actual comment node, therefore it does *NOT* replace comment node with question mark. so SQL will 'SELECT * FROM emp WHERE job = 'CLERK''" do
         | 
| 116 | 
            +
                    @result.sql.should == "SELECT * FROM emp WHERE job = 'CLERK'"
         | 
| 117 | 
            +
                  end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                  it "should have no variable nodes, so return empty Array as bound variables" do
         | 
| 120 | 
            +
                    @result.bound_variables.should be_empty
         | 
| 121 | 
            +
                  end
         | 
| 116 122 | 
             
                end
         | 
| 117 123 |  | 
| 118 | 
            -
                 | 
| 119 | 
            -
                   | 
| 124 | 
            +
                describe "if preserve_comment => true" do
         | 
| 125 | 
            +
                  before do
         | 
| 126 | 
            +
                    sql = "SELECT * FROM emp WHERE job = /*  ctx[:job]*/'CLERK'"
         | 
| 127 | 
            +
                    @template = TwoWaySQL::Template.parse(sql, :preserve_comment => true)
         | 
| 128 | 
            +
                    @ctx[:job] = "HOGE"
         | 
| 129 | 
            +
                    @result = @template.merge(@ctx)
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
                
         | 
| 132 | 
            +
                  it "SQL will 'SELECT * FROM emp WHERE job = /*  ctx[:job]*/'CLERK''" do
         | 
| 133 | 
            +
                    @result.sql.should == "SELECT * FROM emp WHERE job = /*  ctx[:job]*/'CLERK'"
         | 
| 134 | 
            +
                  end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                  it "should have no variable nodes, so return empty Array as bound variables" do
         | 
| 137 | 
            +
                    @result.bound_variables.should be_empty
         | 
| 138 | 
            +
                  end
         | 
| 120 139 | 
             
                end
         | 
| 140 | 
            +
             | 
| 121 141 | 
             
              end
         | 
| 122 142 |  | 
| 123 143 |  | 
| @@ -125,7 +145,7 @@ describe TwoWaySQL::Template do | |
| 125 145 | 
             
              describe "when parsed from 'SELECT * FROM emp WHERE empno = /*ctx[:empno]*/1 AND 1 = 1'" do
         | 
| 126 146 | 
             
                before do
         | 
| 127 147 | 
             
                  sql = "SELECT * FROM emp WHERE empno = /*ctx[:empno]*/1 AND 1 = 1"
         | 
| 128 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 148 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 129 149 |  | 
| 130 150 | 
             
                  @ctx[:empno] = 7788
         | 
| 131 151 | 
             
                  @result = @template.merge(@ctx)
         | 
| @@ -145,7 +165,7 @@ describe TwoWaySQL::Template do | |
| 145 165 | 
             
              describe "when parsed from 'SELECT * FROM emp/*IF ctx[:job] */ WHERE job = /*ctx[:job]*/'CLERK'/*END*/'" do
         | 
| 146 166 | 
             
                before do
         | 
| 147 167 | 
             
                  sql = "SELECT * FROM emp/*IF ctx[:job] */ WHERE job = /*ctx[:job]*/'CLERK'/*END*/"
         | 
| 148 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 168 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 149 169 | 
             
                end
         | 
| 150 170 |  | 
| 151 171 | 
             
                describe "and when :job param exists" do
         | 
| @@ -179,7 +199,7 @@ describe TwoWaySQL::Template do | |
| 179 199 | 
             
              describe "when parsed from SQL with 'nested if' like '/*IF ctx[:aaa]*/aaa/*IF ctx[:bbb]*/bbb/*END*//*END*/'" do
         | 
| 180 200 | 
             
                before do
         | 
| 181 201 | 
             
                  sql = "/*IF ctx[:aaa]*/aaa/*IF ctx[:bbb]*/bbb/*END*//*END*/"
         | 
| 182 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 202 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 183 203 | 
             
                end
         | 
| 184 204 |  | 
| 185 205 | 
             
                describe "and when inner is true but outer is false" do
         | 
| @@ -229,7 +249,7 @@ describe TwoWaySQL::Template do | |
| 229 249 | 
             
              describe "when parsed from 'SELECT * FROM emp WHERE /*IF ctx[:job]*/job = /*ctx[:job]*/'CLERK'-- ELSE job is null/*END*/'" do
         | 
| 230 250 | 
             
                before do
         | 
| 231 251 | 
             
                  sql = "SELECT * FROM emp WHERE /*IF ctx[:job]*/job = /*ctx[:job]*/'CLERK'-- ELSE job is null/*END*/"
         | 
| 232 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 252 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 233 253 | 
             
                end
         | 
| 234 254 |  | 
| 235 255 | 
             
                describe "and when :job param exists" do
         | 
| @@ -263,7 +283,7 @@ describe TwoWaySQL::Template do | |
| 263 283 | 
             
              describe "when parsed from '/*IF false*/aaa--ELSE bbb = /*ctx[:bbb]*/123/*END*/'" do
         | 
| 264 284 | 
             
                before do
         | 
| 265 285 | 
             
                  sql = "/*IF false*/aaa--ELSE bbb = /*ctx[:bbb]*/123/*END*/"
         | 
| 266 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 286 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 267 287 | 
             
                end
         | 
| 268 288 |  | 
| 269 289 | 
             
                describe "and when :bbb param exists" do
         | 
| @@ -297,7 +317,7 @@ describe TwoWaySQL::Template do | |
| 297 317 | 
             
              describe "when parsed from '/*IF false*/aaa--ELSE bbb/*IF false*/ccc--ELSE ddd/*END*//*END*/'" do
         | 
| 298 318 | 
             
                before do
         | 
| 299 319 | 
             
                  sql = "/*IF false*/aaa--ELSE bbb/*IF false*/ccc--ELSE ddd/*END*//*END*/"
         | 
| 300 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 320 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 301 321 | 
             
                  @result = @template.merge(@ctx)
         | 
| 302 322 | 
             
                end
         | 
| 303 323 |  | 
| @@ -311,24 +331,24 @@ describe TwoWaySQL::Template do | |
| 311 331 | 
             
              describe "when parsed from 'SELECT * FROM emp/*BEGIN*/ WHERE /*IF false*/aaa-- ELSE AND deptno = 10/*END*//*END*/'" do
         | 
| 312 332 | 
             
                before do
         | 
| 313 333 | 
             
                  sql = "SELECT * FROM emp/*BEGIN*/ WHERE /*IF false*/aaa-- ELSE AND deptno = 10/*END*//*END*/"
         | 
| 314 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 334 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 315 335 | 
             
                  @result = @template.merge(@ctx)
         | 
| 316 336 | 
             
                end
         | 
| 317 337 |  | 
| 318 | 
            -
                it "parsed SQL should 'SELECT * FROM emp WHERE | 
| 319 | 
            -
                  @result.sql.should == "SELECT * FROM emp WHERE | 
| 338 | 
            +
                it "parsed SQL should 'SELECT * FROM emp WHERE  deptno = 10'" do
         | 
| 339 | 
            +
                  @result.sql.should == "SELECT * FROM emp WHERE  deptno = 10"
         | 
| 320 340 | 
             
                end
         | 
| 321 341 | 
             
              end
         | 
| 322 342 |  | 
| 323 343 | 
             
              describe "when parsed from 'SELECT * FROM emp/*BEGIN*/ WHERE /*IF false*/aaa--- ELSE AND deptno = 10/*END*//*END*/'" do
         | 
| 324 344 | 
             
                before do
         | 
| 325 345 | 
             
                  sql = "SELECT * FROM emp/*BEGIN*/ WHERE /*IF false*/aaa--- ELSE AND deptno = 10/*END*//*END*/"
         | 
| 326 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 346 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 327 347 | 
             
                  @result = @template.merge(@ctx)
         | 
| 328 348 | 
             
                end
         | 
| 329 349 |  | 
| 330 | 
            -
                it "parsed SQL should 'SELECT * FROM emp WHERE | 
| 331 | 
            -
                  @result.sql.should == "SELECT * FROM emp WHERE | 
| 350 | 
            +
                it "parsed SQL should 'SELECT * FROM emp WHERE  deptno = 10'" do
         | 
| 351 | 
            +
                  @result.sql.should == "SELECT * FROM emp WHERE  deptno = 10"
         | 
| 332 352 | 
             
                end
         | 
| 333 353 | 
             
              end
         | 
| 334 354 |  | 
| @@ -337,7 +357,7 @@ describe TwoWaySQL::Template do | |
| 337 357 | 
             
              describe "when parsed from 'SELECT * FROM emp/*BEGIN*/ WHERE /*IF ctx[:job]*/job = /*ctx[:job]*/'CLERK'/*END*//*IF ctx[:deptno]*/ AND deptno = /*ctx[:deptno]*/20/*END*//*END*/'" do
         | 
| 338 358 | 
             
                before do
         | 
| 339 359 | 
             
                  sql = "SELECT * FROM emp/*BEGIN*/ WHERE /*IF ctx[:job]*/job = /*ctx[:job]*/'CLERK'/*END*//*IF ctx[:deptno]*/ AND deptno = /*ctx[:deptno]*/20/*END*//*END*/"
         | 
| 340 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 360 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 341 361 | 
             
                end
         | 
| 342 362 |  | 
| 343 363 | 
             
                describe "and when context is empty (no param exists)" do
         | 
| @@ -384,8 +404,8 @@ describe TwoWaySQL::Template do | |
| 384 404 | 
             
                    @ctx[:deptno] = 20
         | 
| 385 405 | 
             
                    @result = @template.merge(@ctx)
         | 
| 386 406 | 
             
                  end
         | 
| 387 | 
            -
                  it "parsed SQL should 'SELECT * FROM emp WHERE | 
| 388 | 
            -
                    @result.sql.should == 'SELECT * FROM emp WHERE | 
| 407 | 
            +
                  it "parsed SQL should 'SELECT * FROM emp WHERE  deptno = ?'" do
         | 
| 408 | 
            +
                    @result.sql.should == 'SELECT * FROM emp WHERE  deptno = ?'
         | 
| 389 409 | 
             
                  end
         | 
| 390 410 | 
             
                  it "should have bound variables in Array [20]" do
         | 
| 391 411 | 
             
                    @result.bound_variables.should == [20]
         | 
| @@ -398,7 +418,7 @@ describe TwoWaySQL::Template do | |
| 398 418 | 
             
              describe "when parsed from '/*BEGIN*/WHERE /*IF true*/aaa BETWEEN /*ctx[:bbb]*/111 AND /*ctx[:ccc]*/123/*END*//*END*/'" do
         | 
| 399 419 | 
             
                before do
         | 
| 400 420 | 
             
                  sql = "/*BEGIN*/WHERE /*IF true*/aaa BETWEEN /*ctx[:bbb]*/111 AND /*ctx[:ccc]*/123/*END*//*END*/"
         | 
| 401 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 421 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 402 422 | 
             
                end
         | 
| 403 423 |  | 
| 404 424 | 
             
                describe "and when :job and :deptno param exists" do
         | 
| @@ -434,7 +454,7 @@ describe TwoWaySQL::Template do | |
| 434 454 | 
             
              describe "when parsed from 'SELECT * FROM emp WHERE deptno IN /*ctx[:deptnoList]*/(10, 20) ORDER BY ename'" do
         | 
| 435 455 | 
             
                before do
         | 
| 436 456 | 
             
                  sql = "SELECT * FROM emp WHERE deptno IN /*ctx[:deptnoList]*/(10, 20) ORDER BY ename"
         | 
| 437 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 457 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 438 458 | 
             
                end
         | 
| 439 459 |  | 
| 440 460 | 
             
                describe "and when :deptnoList param is [30,40,50]" do
         | 
| @@ -495,7 +515,7 @@ describe TwoWaySQL::Template do | |
| 495 515 | 
             
              describe "when parsed from 'SELECT * FROM emp WHERE ename IN /*ctx[:enames]*/('SCOTT','MARY') AND job IN /*ctx[:jobs]*/('ANALYST', 'FREE')'" do
         | 
| 496 516 | 
             
                before do
         | 
| 497 517 | 
             
                  sql = "SELECT * FROM emp WHERE ename IN /*ctx[:enames]*/('SCOTT','MARY') AND job IN /*ctx[:jobs]*/('ANALYST', 'FREE')"
         | 
| 498 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 518 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 499 519 | 
             
                end
         | 
| 500 520 |  | 
| 501 521 | 
             
                describe "and when :enames param is ['DAVE', 'MARY', 'SCOTT'] and :jobs param is ['MANAGER', 'ANALYST']" do
         | 
| @@ -518,7 +538,7 @@ describe TwoWaySQL::Template do | |
| 518 538 | 
             
              describe "when parsed from 'INSERT INTO ITEM (ID, NUM) VALUES (/*ctx[:id]*/1, /*ctx[:num]*/20)'" do
         | 
| 519 539 | 
             
                before do
         | 
| 520 540 | 
             
                  sql = "INSERT INTO ITEM (ID, NUM) VALUES (/*ctx[:id]*/1, /*ctx[:num]*/20)"
         | 
| 521 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 541 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 522 542 | 
             
                end
         | 
| 523 543 |  | 
| 524 544 | 
             
                describe "and when :id param is 0 and :num param is 1" do
         | 
| @@ -541,7 +561,7 @@ describe TwoWaySQL::Template do | |
| 541 561 | 
             
              describe "when parsed from SQL with embedded variable comment '/*$ctx[:aaa]*/foo'" do
         | 
| 542 562 | 
             
                before do
         | 
| 543 563 | 
             
                  sql = "/*$ctx[:aaa]*/foo"
         | 
| 544 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 564 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 545 565 | 
             
                end
         | 
| 546 566 |  | 
| 547 567 | 
             
                describe "and :aaa param is 'hoge'" do
         | 
| @@ -560,7 +580,7 @@ describe TwoWaySQL::Template do | |
| 560 580 | 
             
              describe "when parsed from SQL with embedded variable comment 'BETWEEN sal ? AND ?'" do
         | 
| 561 581 | 
             
                before do
         | 
| 562 582 | 
             
                  sql = "BETWEEN sal ? AND ?"
         | 
| 563 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 583 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 564 584 | 
             
                end
         | 
| 565 585 |  | 
| 566 586 | 
             
                describe "and ctx[1] = 0 and ctx[2] = 1000 (note: key starts with 1, not 0.)" do
         | 
| @@ -604,7 +624,7 @@ describe TwoWaySQL::Template do | |
| 604 624 | 
             
                describe "that ends with semicolon like 'SELECT * FROM emp;'" do
         | 
| 605 625 | 
             
                  before do
         | 
| 606 626 | 
             
                    sql = "SELECT * FROM emp;"
         | 
| 607 | 
            -
                    @template = TwoWaySQL::Template.parse(sql | 
| 627 | 
            +
                    @template = TwoWaySQL::Template.parse(sql)
         | 
| 608 628 | 
             
                    @result = @template.merge(@ctx)
         | 
| 609 629 | 
             
                  end
         | 
| 610 630 | 
             
                  it "should strip semicolon at input end" do
         | 
| @@ -615,7 +635,7 @@ describe TwoWaySQL::Template do | |
| 615 635 | 
             
                describe "that ends with semicolon and tab like 'SELECT * FROM emp;\t'" do
         | 
| 616 636 | 
             
                  before do
         | 
| 617 637 | 
             
                    sql = "SELECT * FROM emp;\t"
         | 
| 618 | 
            -
                    @template = TwoWaySQL::Template.parse(sql | 
| 638 | 
            +
                    @template = TwoWaySQL::Template.parse(sql)
         | 
| 619 639 | 
             
                    @result = @template.merge(@ctx)
         | 
| 620 640 | 
             
                  end
         | 
| 621 641 | 
             
                  it "should strip semicolon and tab at input end" do
         | 
| @@ -626,7 +646,7 @@ describe TwoWaySQL::Template do | |
| 626 646 | 
             
                describe "that ends with semicolon and spaces like 'SELECT * FROM emp; '" do
         | 
| 627 647 | 
             
                  before do
         | 
| 628 648 | 
             
                    sql = "SELECT * FROM emp; "
         | 
| 629 | 
            -
                    @template = TwoWaySQL::Template.parse(sql | 
| 649 | 
            +
                    @template = TwoWaySQL::Template.parse(sql)
         | 
| 630 650 | 
             
                    @result = @template.merge(@ctx)
         | 
| 631 651 | 
             
                  end
         | 
| 632 652 | 
             
                  it "should strip semicolon and spaces at input end" do
         | 
| @@ -641,7 +661,7 @@ describe TwoWaySQL::Template do | |
| 641 661 | 
             
                describe " '<>' " do
         | 
| 642 662 | 
             
                  before do
         | 
| 643 663 | 
             
                    sql = "SELECT * FROM emp WHERE job <> /*ctx[:job]*/'CLERK'"
         | 
| 644 | 
            -
                    @template = TwoWaySQL::Template.parse(sql | 
| 664 | 
            +
                    @template = TwoWaySQL::Template.parse(sql)
         | 
| 645 665 | 
             
                    @ctx[:job] = "HOGE"
         | 
| 646 666 | 
             
                    @result = @template.merge(@ctx)
         | 
| 647 667 | 
             
                  end
         | 
| @@ -659,7 +679,7 @@ describe TwoWaySQL::Template do | |
| 659 679 | 
             
                describe "minus, such as -5 " do
         | 
| 660 680 | 
             
                  before do
         | 
| 661 681 | 
             
                    sql = "SELECT * FROM statistics WHERE degree = /*ctx[:degree]*/-5"
         | 
| 662 | 
            -
                    @template = TwoWaySQL::Template.parse(sql | 
| 682 | 
            +
                    @template = TwoWaySQL::Template.parse(sql)
         | 
| 663 683 | 
             
                    @ctx[:degree] = -10
         | 
| 664 684 | 
             
                    @result = @template.merge(@ctx)
         | 
| 665 685 | 
             
                  end
         | 
| @@ -677,7 +697,7 @@ describe TwoWaySQL::Template do | |
| 677 697 | 
             
                describe "quote escape, such as 'Let''s' " do
         | 
| 678 698 | 
             
                  before do
         | 
| 679 699 | 
             
                    sql = "SELECT * FROM comments WHERE message = /*ctx[:message]*/'Let''s GO'"
         | 
| 680 | 
            -
                    @template = TwoWaySQL::Template.parse(sql | 
| 700 | 
            +
                    @template = TwoWaySQL::Template.parse(sql)
         | 
| 681 701 | 
             
                    @ctx[:message] = "Hang'in there"
         | 
| 682 702 | 
             
                    @result = @template.merge(@ctx)
         | 
| 683 703 | 
             
                  end
         | 
| @@ -698,7 +718,7 @@ describe TwoWaySQL::Template do | |
| 698 718 | 
             
              describe "when parsed from 'SELECT * FROM emp -- comments here'" do
         | 
| 699 719 | 
             
                before do
         | 
| 700 720 | 
             
                  sql = "SELECT * FROM emp -- comments here"
         | 
| 701 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 721 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 702 722 | 
             
                end
         | 
| 703 723 |  | 
| 704 724 | 
             
                describe "and when 'job' param does not exist" do
         | 
| @@ -718,7 +738,7 @@ describe TwoWaySQL::Template do | |
| 718 738 | 
             
              describe "when parsed from 'SELECT * FROM emp WHERE empno = /*ctx[:empno]*/5.0 AND 1 = 1'" do
         | 
| 719 739 | 
             
                before do
         | 
| 720 740 | 
             
                  sql = "SELECT * FROM emp WHERE empno = /*ctx[:empno]*/5.0 AND 1 = 1"
         | 
| 721 | 
            -
                  @template = TwoWaySQL::Template.parse(sql | 
| 741 | 
            +
                  @template = TwoWaySQL::Template.parse(sql)
         | 
| 722 742 |  | 
| 723 743 | 
             
                  @ctx[:empno] = 7788
         | 
| 724 744 | 
             
                  @result = @template.merge(@ctx)
         | 
| @@ -733,4 +753,165 @@ describe TwoWaySQL::Template do | |
| 733 753 | 
             
                end
         | 
| 734 754 | 
             
              end
         | 
| 735 755 |  | 
| 756 | 
            +
             | 
| 757 | 
            +
             | 
| 758 | 
            +
              describe "space compaction mode" do
         | 
| 759 | 
            +
                describe "compaction of space node" do
         | 
| 760 | 
            +
                  before do
         | 
| 761 | 
            +
                    sql = <<-EOS
         | 
| 762 | 
            +
            SELECT
         | 
| 763 | 
            +
              *
         | 
| 764 | 
            +
            FROM
         | 
| 765 | 
            +
              emp
         | 
| 766 | 
            +
            WHERE
         | 
| 767 | 
            +
              job    =   /*ctx[:job]*/'CLERK'
         | 
| 768 | 
            +
              AND   deptno   =   /*ctx[:deptno]*/10
         | 
| 769 | 
            +
            EOS
         | 
| 770 | 
            +
                    @template = TwoWaySQL::Template.parse(sql, :preserve_space => false)
         | 
| 771 | 
            +
                    @ctx[:job] = 'MANAGER'
         | 
| 772 | 
            +
                    @ctx[:deptno] = 30
         | 
| 773 | 
            +
                    @result = @template.merge(@ctx)
         | 
| 774 | 
            +
                  end
         | 
| 775 | 
            +
             | 
| 776 | 
            +
                  it  do
         | 
| 777 | 
            +
                    @result.sql.should == "SELECT * FROM emp WHERE job = ? AND deptno = ? "
         | 
| 778 | 
            +
                    @result.bound_variables.should == ["MANAGER", 30]
         | 
| 779 | 
            +
                  end
         | 
| 780 | 
            +
                end
         | 
| 781 | 
            +
             | 
| 782 | 
            +
                describe "treat line end as one space" do
         | 
| 783 | 
            +
                  before do
         | 
| 784 | 
            +
                    sql = <<-EOS
         | 
| 785 | 
            +
            SELECT
         | 
| 786 | 
            +
            *
         | 
| 787 | 
            +
            FROM
         | 
| 788 | 
            +
            emp
         | 
| 789 | 
            +
            WHERE
         | 
| 790 | 
            +
            job    =   /*ctx[:job]*/'CLERK'
         | 
| 791 | 
            +
            AND   deptno   =   /*ctx[:deptno]*/10
         | 
| 792 | 
            +
            EOS
         | 
| 793 | 
            +
                    @template = TwoWaySQL::Template.parse(sql, :preserve_space => false)
         | 
| 794 | 
            +
                    @ctx[:job] = 'MANAGER'
         | 
| 795 | 
            +
                    @ctx[:deptno] = 30
         | 
| 796 | 
            +
                    @result = @template.merge(@ctx)
         | 
| 797 | 
            +
                  end
         | 
| 798 | 
            +
             | 
| 799 | 
            +
                  it  do
         | 
| 800 | 
            +
                    @result.sql.should == "SELECT * FROM emp WHERE job = ? AND deptno = ? "
         | 
| 801 | 
            +
                    @result.bound_variables.should == ["MANAGER", 30]
         | 
| 802 | 
            +
                  end
         | 
| 803 | 
            +
                end
         | 
| 804 | 
            +
             | 
| 805 | 
            +
                describe ":preserve_space => false, :preserve_comment => false" do
         | 
| 806 | 
            +
                  before do
         | 
| 807 | 
            +
                    sql = <<-EOS
         | 
| 808 | 
            +
            SELECT
         | 
| 809 | 
            +
              *
         | 
| 810 | 
            +
            FROM
         | 
| 811 | 
            +
              emp
         | 
| 812 | 
            +
              /* 
         | 
| 813 | 
            +
                 This is
         | 
| 814 | 
            +
                 multiline comment
         | 
| 815 | 
            +
              */
         | 
| 816 | 
            +
            WHERE
         | 
| 817 | 
            +
              job    =   /*ctx[:job]*/'CLERK'
         | 
| 818 | 
            +
              AND   deptno   =   /*ctx[:deptno]*/10
         | 
| 819 | 
            +
            EOS
         | 
| 820 | 
            +
                    @template = TwoWaySQL::Template.parse(sql, :preserve_space => false, :preserve_comment => false)
         | 
| 821 | 
            +
                    @ctx[:job] = 'MANAGER'
         | 
| 822 | 
            +
                    @ctx[:deptno] = 30
         | 
| 823 | 
            +
                    @result = @template.merge(@ctx)
         | 
| 824 | 
            +
                  end
         | 
| 825 | 
            +
             | 
| 826 | 
            +
                  it "handle multiline comment then ignore it if @preserve_comment is falsy" do
         | 
| 827 | 
            +
                    @result.sql.should == "SELECT * FROM emp  WHERE job = ? AND deptno = ? "
         | 
| 828 | 
            +
                    @result.bound_variables.should == ["MANAGER", 30]
         | 
| 829 | 
            +
                  end
         | 
| 830 | 
            +
                end
         | 
| 831 | 
            +
             | 
| 832 | 
            +
              end
         | 
| 833 | 
            +
             | 
| 834 | 
            +
             | 
| 835 | 
            +
             | 
| 836 | 
            +
              describe "multiline actual comment" do
         | 
| 837 | 
            +
             | 
| 838 | 
            +
                describe ":preserve_comment => false" do
         | 
| 839 | 
            +
                  before do
         | 
| 840 | 
            +
                    sql = <<-EOS
         | 
| 841 | 
            +
            SELECT
         | 
| 842 | 
            +
              *
         | 
| 843 | 
            +
            FROM
         | 
| 844 | 
            +
              emp
         | 
| 845 | 
            +
              /* 
         | 
| 846 | 
            +
                 This is
         | 
| 847 | 
            +
                 multiline comment
         | 
| 848 | 
            +
              */
         | 
| 849 | 
            +
            WHERE
         | 
| 850 | 
            +
              job    =   /*ctx[:job]*/'CLERK'
         | 
| 851 | 
            +
              AND   deptno   =   /*ctx[:deptno]*/10
         | 
| 852 | 
            +
            EOS
         | 
| 853 | 
            +
                    @template = TwoWaySQL::Template.parse(sql, :preserve_comment => false)
         | 
| 854 | 
            +
                    @ctx[:job] = 'MANAGER'
         | 
| 855 | 
            +
                    @ctx[:deptno] = 30
         | 
| 856 | 
            +
                    @result = @template.merge(@ctx)
         | 
| 857 | 
            +
                  end
         | 
| 858 | 
            +
             | 
| 859 | 
            +
                  it "handle multiline comment then remove it if @preserve_comment is falsy" do
         | 
| 860 | 
            +
                    expected = <<-EOS
         | 
| 861 | 
            +
            SELECT
         | 
| 862 | 
            +
              *
         | 
| 863 | 
            +
            FROM
         | 
| 864 | 
            +
              emp
         | 
| 865 | 
            +
              
         | 
| 866 | 
            +
            WHERE
         | 
| 867 | 
            +
              job    =   ?
         | 
| 868 | 
            +
              AND   deptno   =   ?
         | 
| 869 | 
            +
            EOS
         | 
| 870 | 
            +
                    @result.sql.should == expected
         | 
| 871 | 
            +
                    @result.bound_variables.should == ["MANAGER", 30]
         | 
| 872 | 
            +
                  end
         | 
| 873 | 
            +
                end
         | 
| 874 | 
            +
             | 
| 875 | 
            +
                describe ":preserve_comment => true" do
         | 
| 876 | 
            +
                  before do
         | 
| 877 | 
            +
                    sql = <<-EOS
         | 
| 878 | 
            +
            SELECT
         | 
| 879 | 
            +
              *
         | 
| 880 | 
            +
            FROM
         | 
| 881 | 
            +
              emp
         | 
| 882 | 
            +
              /* 
         | 
| 883 | 
            +
                 This is
         | 
| 884 | 
            +
                 multiline comment
         | 
| 885 | 
            +
              */
         | 
| 886 | 
            +
            WHERE
         | 
| 887 | 
            +
              job    =   /*ctx[:job]*/'CLERK'
         | 
| 888 | 
            +
              AND   deptno   =   /*ctx[:deptno]*/10
         | 
| 889 | 
            +
            EOS
         | 
| 890 | 
            +
                    @template = TwoWaySQL::Template.parse(sql, :preserve_comment => true)
         | 
| 891 | 
            +
                    @ctx[:job] = 'MANAGER'
         | 
| 892 | 
            +
                    @ctx[:deptno] = 30
         | 
| 893 | 
            +
                    @result = @template.merge(@ctx)
         | 
| 894 | 
            +
                  end
         | 
| 895 | 
            +
             | 
| 896 | 
            +
                  it "handle multiline comment then preserve it if @preserve_comment is truthy" do
         | 
| 897 | 
            +
                    expected = <<-EOS
         | 
| 898 | 
            +
            SELECT
         | 
| 899 | 
            +
              *
         | 
| 900 | 
            +
            FROM
         | 
| 901 | 
            +
              emp
         | 
| 902 | 
            +
              /* 
         | 
| 903 | 
            +
                 This is
         | 
| 904 | 
            +
                 multiline comment
         | 
| 905 | 
            +
              */
         | 
| 906 | 
            +
            WHERE
         | 
| 907 | 
            +
              job    =   ?
         | 
| 908 | 
            +
              AND   deptno   =   ?
         | 
| 909 | 
            +
            EOS
         | 
| 910 | 
            +
                    @result.sql.should == expected
         | 
| 911 | 
            +
                    @result.bound_variables.should == ["MANAGER", 30]
         | 
| 912 | 
            +
                  end
         | 
| 913 | 
            +
                end
         | 
| 914 | 
            +
              end
         | 
| 915 | 
            +
             | 
| 916 | 
            +
             | 
| 736 917 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: twowaysql
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Takuto Wada
         | 
| @@ -9,7 +9,7 @@ autorequire: | |
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 11 |  | 
| 12 | 
            -
            date: 2008-09- | 
| 12 | 
            +
            date: 2008-09-10 00:00:00 +09:00
         | 
| 13 13 | 
             
            default_executable: 
         | 
| 14 14 | 
             
            dependencies: 
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -42,16 +42,21 @@ files: | |
| 42 42 | 
             
            - Rakefile
         | 
| 43 43 | 
             
            - config/hoe.rb
         | 
| 44 44 | 
             
            - config/requirements.rb
         | 
| 45 | 
            +
            - issues/issue-001c53236380a42cd8c5a9099bbcc6ec613919c2.yaml
         | 
| 45 46 | 
             
            - issues/issue-1cee7e821865a216674832b0186bd92792680571.yaml
         | 
| 46 47 | 
             
            - issues/issue-25efcfc383f3b0f6c0e2730ae7c2975bb2b3de26.yaml
         | 
| 48 | 
            +
            - issues/issue-279105dd0d9f03514d318f5eab5e99c4c2d47fda.yaml
         | 
| 49 | 
            +
            - issues/issue-28cde89ed3eb306957edc90595b1d16bf43daf42.yaml
         | 
| 47 50 | 
             
            - issues/issue-39023ea09e17e2d64bcef03aa59cdfe38b78ad5b.yaml
         | 
| 48 51 | 
             
            - issues/issue-4bc308d55ae91f266e656162a4147d356de1166c.yaml
         | 
| 49 52 | 
             
            - issues/issue-5c973ef5bb074eacca0c6c84f7d27c4267773ea8.yaml
         | 
| 50 53 | 
             
            - issues/issue-664986b219202ff1948cab717b56e7540f493561.yaml
         | 
| 54 | 
            +
            - issues/issue-6daccddf089d11d42bf016897da98f70cf5ab46c.yaml
         | 
| 51 55 | 
             
            - issues/issue-897995fa10377eabdf597e8e7692f17087c76923.yaml
         | 
| 52 56 | 
             
            - issues/issue-901f65630639507c8b05b466790e9f22256c6450.yaml
         | 
| 53 57 | 
             
            - issues/issue-bd38c1cdc965d73dd629a81db2de1bcdcf4b10b8.yaml
         | 
| 54 58 | 
             
            - issues/issue-dca4b19aa13de59838b33e03252bf824670a2d12.yaml
         | 
| 59 | 
            +
            - issues/issue-f1bd40de5458397d9b142ea3e197e5264e0dcdbf.yaml
         | 
| 55 60 | 
             
            - issues/issue-f2b773020b54f839c03d899b38b5113c8fd991df.yaml
         | 
| 56 61 | 
             
            - issues/issue-f39b907d01d7fa93df8c7a9de2e1b5e27727ee0a.yaml
         | 
| 57 62 | 
             
            - issues/issue-f64d73ed4f9854f1ded77e6496dbf59cfb3770a7.yaml
         |