pg_query 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
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: []