From 66327e64524f833209ee594432296d57a5a30bc4 Mon Sep 17 00:00:00 2001 From: derekstride Date: Fri, 28 Jun 2024 13:05:56 -0400 Subject: [PATCH] refactor: view -> query & test helpers --- lib/sql_tools/{view.rb => query.rb} | 2 +- .../{view_visitor.rb => query_visitor.rb} | 12 ++++---- test/test_helper.rb | 12 ++++++++ test/unit/view_visitor_test.rb | 29 ++++++------------- 4 files changed, 28 insertions(+), 27 deletions(-) rename lib/sql_tools/{view.rb => query.rb} (99%) rename lib/sql_tools/{view_visitor.rb => query_visitor.rb} (54%) diff --git a/lib/sql_tools/view.rb b/lib/sql_tools/query.rb similarity index 99% rename from lib/sql_tools/view.rb rename to lib/sql_tools/query.rb index a1529b7..4ceaeaf 100644 --- a/lib/sql_tools/view.rb +++ b/lib/sql_tools/query.rb @@ -1,5 +1,5 @@ module SqlTools - class View + class Query attr_accessor :select, :from attr_reader :common_table_expressions diff --git a/lib/sql_tools/view_visitor.rb b/lib/sql_tools/query_visitor.rb similarity index 54% rename from lib/sql_tools/view_visitor.rb rename to lib/sql_tools/query_visitor.rb index 1a83958..7eaaf85 100644 --- a/lib/sql_tools/view_visitor.rb +++ b/lib/sql_tools/query_visitor.rb @@ -1,24 +1,24 @@ module SqlTools - class ViewVisitor < TreeStand::Visitor - attr_reader :view + class QueryVisitor < TreeStand::Visitor + attr_reader :query def initialize(node) super(node) @ctes = {} - @view = View.new + @query = Query.new end def on_cte(node) cte = CommonTableExpression.new(node) - @view.common_table_expressions[cte.name] = cte + @query.common_table_expressions[cte.name] = cte end def on_select(node) - @view.select = node + @query.select = node end def on_from(node) - @view.from = node + @query.from = node end end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 420f454..45a1d1f 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -15,3 +15,15 @@ config.parser_path = File.join(__dir__, "..", "treesitter") end +module TreeStandHelper + def query_from_sql(source) = visit_tree(parse(source)) + def visit_tree(tree) = SqlTools::QueryVisitor.new(tree.root_node).visit.query + def parse(source) = parser.parse_string(source) + def parser = @parser ||= TreeStand::Parser.new("sql") +end + +module Minitest + class Test + include TreeStandHelper + end +end diff --git a/test/unit/view_visitor_test.rb b/test/unit/view_visitor_test.rb index 236aef4..7c6bce9 100644 --- a/test/unit/view_visitor_test.rb +++ b/test/unit/view_visitor_test.rb @@ -4,46 +4,35 @@ module SqlTools class ViewVisitorTest < Minitest::Test - def setup - @parser = TreeStand::Parser.new("sql") - end - def test_visit_select - tree = @parser.parse_string(<<~SQL) + query = query_from_sql(<<~SQL) SELECT * FROM table SQL - visitor = ViewVisitor.new(tree.root_node).visit - view = visitor.view - - assert_instance_of(View, view) + assert_instance_of(Query, query) - assert_equal(1, view.selections.size) - assert_equal(AllFieldsSelection.new, view.selections.first) + assert_equal(1, query.selections.size) + assert_equal(AllFieldsSelection.new, query.selections.first) - assert_equal(1, view.objects.size) - assert_equal(Table.new(name: "table", alias: "table"), view.objects.first) + assert_equal(1, query.objects.size) + assert_equal(Table.new(name: "table", alias: "table"), query.objects.first) end def test_visit_select_with_predicate - tree = @parser.parse_string(<<~SQL) + query = query_from_sql(<<~SQL) SELECT * FROM table WHERE id = 1 SQL - visitor = ViewVisitor.new(tree.root_node).visit - view = visitor.view - - - assert_equal(1, view.predicates.size) + assert_equal(1, query.predicates.size) assert_equal( Predicate::Binary.new( left: Column.new(table: nil, name: "id"), operator: "=", right: "1", ), - view.predicates.first, + query.predicates.first, ) end end