pg_query 0.2.7 → 0.2.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 436c39c88606860708a62a007c94e3681946a179
4
- data.tar.gz: 6ca769bb0fd9e9533b31f0c8729c4c91cfa2035d
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YzUxOGE4ZjRmZjRhYTk3MGI5NzBkMzI5OWFiMWIzNWViZGIzZWJiOA==
5
+ data.tar.gz: !binary |-
6
+ ZmY3NmRhMDczMDYwODZlM2FmNzMwNmY1Nzc5YjM2YWU4MTQ1YTUxZg==
5
7
  SHA512:
6
- metadata.gz: 38956a8035166579310f9e69ca40c71ce4dd648e298fb4f1bd2a90335e0e4b22e7d9d1c0461e2da7b86b3473f5139f2d64bd2f1451381d6bf33d4dcc1204caaf
7
- data.tar.gz: 2ae516ad313a283e67d359dabcae0652d9e91cb0b86ac3d2ab7421d9305b501e6ccfc5895b74c6a5897106098f66c20419e1baada0845796600cbd32f85af6b3
8
+ metadata.gz: !binary |-
9
+ MWJjMzhhZWIyMGViNjY3ODJmZmRjYzYyNWZkMThhNjhhOWJhYTcxZWM3Yzlj
10
+ YTAwZGUyYWZmZTJhMThhMmE1Y2MzNjEzMTA2NDhhODI1MjU1Y2JlMTk5MzY3
11
+ ZGNhZDVkZGJiODlkZWUyZjI0MzcwZDBlYWM0OGU3ZDRlZmYzZGM=
12
+ data.tar.gz: !binary |-
13
+ MTdiN2M0NmFhMDBlZTA5Y2I5Yzc4ZWRiNGEzZGVlNjlmNDA0OGE3NmFmMzYx
14
+ MDY1MThjYWRjMDBiYWRlYTg2NWEyMWFhMTU5ZDMyNTBhOWY3NDBkZWJlZTkz
15
+ YzYxN2FlOWIxZDExMzdkNGZhYjE5MjNlMzIzODVmOGRjMDhjZDg=
@@ -27,4 +27,96 @@ class PgQuery
27
27
  @parsetree = parsetree
28
28
  @warnings = warnings
29
29
  end
30
+
31
+ def tables
32
+ load_tables_and_aliases! if @tables.nil?
33
+ @tables
34
+ end
35
+
36
+ def aliases
37
+ load_tables_and_aliases! if @aliases.nil?
38
+ @aliases
39
+ end
40
+
41
+ protected
42
+ def load_tables_and_aliases!
43
+ @tables = []
44
+ @aliases = {}
45
+
46
+ statements = @parsetree.dup
47
+ from_clause_items = []
48
+ where_clause_items = []
49
+
50
+ loop do
51
+ if statement = statements.shift
52
+ case statement.keys[0]
53
+ when "SELECT"
54
+ if statement["SELECT"]["op"] == 0
55
+ (statement["SELECT"]["fromClause"] || []).each do |item|
56
+ if item["RANGESUBSELECT"]
57
+ statements << item["RANGESUBSELECT"]["subquery"]
58
+ else
59
+ from_clause_items << item
60
+ end
61
+ end
62
+ elsif statement["SELECT"]["op"] == 1
63
+ statements << statement["SELECT"]["larg"] if statement["SELECT"]["larg"]
64
+ statements << statement["SELECT"]["rarg"] if statement["SELECT"]["rarg"]
65
+ end
66
+ when "INSERT INTO", "UPDATE", "DELETE FROM", "VACUUM", "COPY", "ALTER TABLE"
67
+ from_clause_items << statement.values[0]["relation"]
68
+ when "EXPLAIN"
69
+ statements << statement["EXPLAIN"]["query"]
70
+ when "CREATE TABLE AS"
71
+ from_clause_items << statement["CREATE TABLE AS"]["into"]["INTOCLAUSE"]["rel"] rescue nil
72
+ when "LOCK"
73
+ from_clause_items += statement["LOCK"]["relations"]
74
+ when "DROP"
75
+ object_type = statement["DROP"]["removeType"]
76
+ @tables += statement["DROP"]["objects"].map {|r| r.join('.') } if object_type == 26 # Table
77
+ end
78
+
79
+ where_clause_items << statement.values[0]["whereClause"] if !statement.empty? && statement.values[0]["whereClause"]
80
+ end
81
+
82
+ # Find subselects in WHERE clause
83
+ if next_item = where_clause_items.shift
84
+ case next_item.keys[0]
85
+ when /^AEXPR/, 'ANY'
86
+ ["lexpr", "rexpr"].each do |side|
87
+ next unless elem = next_item.values[0][side]
88
+ if elem.is_a?(Array)
89
+ where_clause_items += elem
90
+ else
91
+ where_clause_items << elem
92
+ end
93
+ end
94
+ when 'SUBLINK'
95
+ statements << next_item["SUBLINK"]["subselect"]
96
+ end
97
+ end
98
+
99
+ break if where_clause_items.empty? && statements.empty?
100
+ end
101
+
102
+ loop do
103
+ break unless next_item = from_clause_items.shift
104
+
105
+ case next_item.keys[0]
106
+ when "JOINEXPR"
107
+ ["larg", "rarg"].each do |side|
108
+ from_clause_items << next_item["JOINEXPR"][side]
109
+ end
110
+ when "ROW"
111
+ from_clause_items += next_item["ROW"]["args"]
112
+ when "RANGEVAR"
113
+ rangevar = next_item["RANGEVAR"]
114
+ table = [rangevar["schemaname"], rangevar["relname"]].compact.join('.')
115
+ @tables << table
116
+ @aliases[rangevar["alias"]["ALIAS"]["aliasname"]] = table if rangevar["alias"]
117
+ end
118
+ end
119
+
120
+ @tables.uniq!
121
+ end
30
122
  end
@@ -1,3 +1,3 @@
1
1
  class PgQuery
2
- VERSION = '0.2.7'
2
+ VERSION = '0.2.8'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Fittl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-31 00:00:00.000000000 Z
11
+ date: 2014-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -78,12 +78,12 @@ require_paths:
78
78
  - lib
79
79
  required_ruby_version: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - '>='
81
+ - - ! '>='
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - '>='
86
+ - - ! '>='
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  requirements: []