diff --git a/README.md b/README.md index ba3b495..3119185 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,14 @@ builder.query.each do |t| end ``` +The same builder's statement may occur multiple times. + +```ruby +builder = conn.build('(/*select*/ from books) union (/*select*/ from movies)').select('title').query + +# => (SELECT title from books) union (SELECT title from movies) +``` + The builder predefined next _SQL Literals_ | Method | SQL Literal | diff --git a/lib/mini_sql/builder.rb b/lib/mini_sql/builder.rb index 439275b..1afae64 100644 --- a/lib/mini_sql/builder.rb +++ b/lib/mini_sql/builder.rb @@ -128,7 +128,7 @@ def count(field = '*') v end - unless sql.sub!("/*#{k}*/", joined) + unless sql.gsub!("/*#{k}*/", joined) raise "The section for the /*#{k}*/ clause was not found!" end end diff --git a/test/mini_sql/builder_tests.rb b/test/mini_sql/builder_tests.rb index 9f39a1f..740e9a6 100644 --- a/test/mini_sql/builder_tests.rb +++ b/test/mini_sql/builder_tests.rb @@ -229,6 +229,12 @@ def test_sql_literal assert_equal(builder.to_sql, 'SELECT * FROM products WHERE id = 10') end + def test_sql_literal_multiple + builder = @connection.build("(select 1 AS x /*polymorphic_where*/) union all (select 2 AS x /*polymorphic_where*/)") + builder.sql_literal(polymorphic_where: 'where 1 = 1') + assert_equal(builder.to_sql, "(select 1 AS x where 1 = 1) union all (select 2 AS x where 1 = 1)") + end + def test_sql_literal_for_builder user_builder = @connection.build("SELECT * FROM users /*where*/").where('id = ?', 10) builder = @connection.build("SELECT * FROM (/*user_table*/) AS t")