quote-sql 0.0.3 → 0.0.5

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.
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quote-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Kufner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-24 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: niceql
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: 'QuoteSql helps you creating SQL queries and proper quoting especially
14
28
  with advanced queries.
15
29
 
@@ -23,12 +37,13 @@ files:
23
37
  - lib/quote_sql.rb
24
38
  - lib/quote_sql/connector.rb
25
39
  - lib/quote_sql/connector/active_record_base.rb
26
- - lib/quote_sql/deprecated.rb
40
+ - lib/quote_sql/error.rb
27
41
  - lib/quote_sql/extension.rb
28
42
  - lib/quote_sql/formater.rb
29
43
  - lib/quote_sql/quoter.rb
30
44
  - lib/quote_sql/quoting.rb
31
45
  - lib/quote_sql/test.rb
46
+ - lib/quote_sql/version.rb
32
47
  homepage: https://github.com/martin-kufner/quote-sql
33
48
  licenses:
34
49
  - MIT
@@ -48,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
63
  - !ruby/object:Gem::Version
49
64
  version: '0'
50
65
  requirements: []
51
- rubygems_version: 3.4.19
66
+ rubygems_version: 3.5.6
52
67
  signing_key:
53
68
  specification_version: 4
54
69
  summary: Tool to build and run SQL queries easier
@@ -1,162 +0,0 @@
1
- class QuoteSql
2
- module Deprecated
3
- private def conn
4
- ApplicationRecord.connection
5
- end
6
-
7
- private def quote_sql_values(sub, casts)
8
- sub.map do |s|
9
- casts.map do |k, column|
10
- column.transform_keys(&:to_sym) => { sql_type:, default:, array: }
11
- value = s.key?(k) ? s[k] : s[k.to_sym]
12
- if value.nil?
13
- value = default
14
- else
15
- value = value.to_json if sql_type[/^json/]
16
- end
17
- "#{conn.quote(value)}::#{sql_type}"
18
- end.join(",")
19
- end
20
- end
21
-
22
- def quote_sql(**options)
23
- loop do
24
- # keys = []
25
- break unless gsub!(%r{(?<=^|\W)[:$](#{options.keys.join("|")})(?=\W|$)}) do |m|
26
- key = m[1..].to_sym
27
- # keys << key
28
- next m unless options.key? key
29
- sub = options[key]
30
- case sub
31
- when Arel::Nodes::SqlLiteral
32
- next sub
33
- when NilClass
34
- next "NULL"
35
- when TrueClass, FalseClass
36
- next sub.to_s.upcase
37
- when Time
38
- sub = sub.strftime("%Y-%m-%d %H:%M:%S.%3N%z")
39
- end
40
- if sub.respond_to? :to_sql
41
- next sub.to_sql
42
- end
43
- case m
44
- when /^:(.+)_(FROM_CLAUSE)$/ # prefix (column,...) AS ( VALUES (data::CAST, ...), ...)
45
- name = conn.quote_column_name($1)
46
- casts = sub.shift.transform_keys(&:to_s)
47
- rv = quote_sql_values(sub, casts)
48
- column_names = casts.map { conn.quote_column_name(_2.key?(:as) ? _2[:as] : _1) }
49
- next "(VALUES \n(#{rv.join("),\n(")})\n ) #{name} (#{column_names.join(",") })"
50
-
51
- when /^:(.+)_(as_select)$/i # prefix (column,...) AS ( VALUES (data::CAST, ...), ...)
52
- name = conn.quote_column_name($1)
53
- casts = sub.shift.transform_keys(&:to_s)
54
- rv = quote_sql_values(sub, casts)
55
- next "SELECT * FROM (VALUES \n(#{rv.join("),\n(")})\n ) #{name} (#{casts.keys.map { conn.quote_column_name(_1) }.join(",") })"
56
- when /^:(.+)_(as_values)$/i # prefix (column,...) AS ( VALUES (data::CAST, ...), ...)
57
- name = conn.quote_column_name($1)
58
- casts = sub.shift.transform_keys(&:to_s)
59
- rv = quote_sql_values(sub, casts)
60
- next "#{name} (#{casts.keys.map { conn.quote_column_name(_1) }.join(",") }) AS ( VALUES \n(#{rv.join("),\n(")})\n )"
61
- when /^:(.+)_(values)$/i
62
- casts = sub.shift.transform_keys(&:to_sym)
63
- rv = quote_sql_values(sub, casts)
64
- next "VALUES \n(#{rv.join("),\n(")})\n"
65
- when /_(LIST)$/i
66
- next sub.map { conn.quote _1 }.join(",")
67
- when /_(args)$/i
68
- next sub.join(',')
69
- when /_(raw|sql)$/i
70
- next sub
71
- when /_(ident|column)$/i, /table_name$/, /_?columns?$/, /column_names$/
72
- if sub.is_a? Array
73
- next sub.map do
74
- _1[/^"[^"]+"\."[^"]+"$/] ? _1 : conn.quote_column_name(_1)
75
- end.join(',')
76
- else
77
- next conn.quote_column_name(sub)
78
- end
79
- when /(?<=_)jsonb?$/i
80
- next conn.quote(sub.to_json) + "::#{$MATCH}"
81
- when /(?<=_)(uuid|int|text)$/i
82
- cast = "::#{$MATCH}"
83
- end
84
- case sub
85
- when Regexp
86
- sub.to_postgres
87
- when Array
88
- dims = 1 # todo more dimensional Arrays
89
- dive = ->(ary) do
90
- ary.map { |s| conn.quote s }.join(',')
91
- end
92
- sub = "[#{dive.call sub}]"
93
- cast += "[]" * dims if cast.present?
94
- "ARRAY#{sub}#{cast}"
95
- else
96
- "#{conn.quote(sub)}#{cast}"
97
- end
98
- end
99
- # break if options.except!(*keys).blank?
100
- end
101
- Arel.sql self
102
- end
103
-
104
- def exec
105
- result = conn.exec_query(self)
106
- columns = result.columns.map(&:to_sym)
107
- result.cast_values.map do |row|
108
- row = [row] unless row.is_a? Array
109
- [columns, row].transpose.to_h
110
- end
111
- end
112
-
113
- def quote_exec(**)
114
- quote_sql(**).exec
115
- end
116
-
117
- module Dsql
118
-
119
- def dsql
120
- IO.popen(PG_FORMAT_BIN, "r+", err: "/dev/null") do |f|
121
- f.write self
122
- f.close_write
123
- puts f.read
124
- end
125
- self
126
- rescue
127
- self
128
- end
129
- end
130
-
131
- include Dsql
132
-
133
- module String
134
- def self.included(other)
135
- other.include Dsql
136
- end
137
-
138
- def quote_sql(**)
139
- Arel.sql(self).quote_sql(**)
140
- end
141
- end
142
-
143
- module Relation
144
- def quote_sql(**)
145
- Arel.sql(to_sql).quote_sql(**)
146
- end
147
-
148
- def dsql
149
- to_sql.dsql
150
- self
151
- end
152
-
153
- def result
154
- result = ApplicationRecord.connection.exec_query(to_sql)
155
- columns = result.columns.map(&:to_sym)
156
- result.cast_values.map do |row|
157
- [columns, Array(row)].transpose.to_h
158
- end
159
- end
160
- end
161
- end
162
- end