actn-db 0.0.3 → 0.0.4
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 +4 -4
- data/Gemfile +1 -1
- data/Rakefile +1 -1
- data/db/1_db.sql +1 -3
- data/db/__functions.sql +10 -92
- data/db/__setup.sql +7 -16
- data/db/lib/{_1_underscore.js → _0_underscore.js} +0 -0
- data/db/lib/{_3_inflections.js → _1_inflections.js} +0 -0
- data/db/lib/_2_jjv.js +2 -3
- data/db/lib/_3_actn.js +31 -0
- data/db/lib/_4_functions.coffee +387 -0
- data/db/lib/_4_functions.js +444 -0
- data/db/lib/_5_builder.coffee +142 -0
- data/db/lib/{_4_builder.js → _5_builder.js} +3 -5
- data/lib/actn/db/tasks/db.rake +24 -11
- data/lib/actn/db/version.rb +1 -1
- data/test/actn/test_model.rb +1 -1
- data/test/minitest_helper.rb +2 -2
- metadata +9 -7
- data/db/lib/_0_actn.js +0 -23
- data/db/lib/_4_builder.coffee +0 -136
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Generated by CoffeeScript 1.6.3
|
|
2
2
|
(function() {
|
|
3
|
-
var Builder;
|
|
4
|
-
|
|
3
|
+
var Builder, root;
|
|
4
|
+
root = this;
|
|
5
5
|
Builder = (function() {
|
|
6
6
|
function Builder(schema_name, table_name, search_path, query) {
|
|
7
7
|
var _base;
|
|
@@ -212,7 +212,5 @@
|
|
|
212
212
|
return Builder;
|
|
213
213
|
|
|
214
214
|
})();
|
|
215
|
-
|
|
216
|
-
actn.Builder = Builder;
|
|
217
|
-
|
|
215
|
+
return root.actn.Builder = Builder;
|
|
218
216
|
}).call(this);
|
data/lib/actn/db/tasks/db.rake
CHANGED
|
@@ -4,8 +4,8 @@ namespace :db do
|
|
|
4
4
|
|
|
5
5
|
desc "erases and rewinds all dbs"
|
|
6
6
|
task :reset do
|
|
7
|
-
Rake::Task["db:
|
|
8
|
-
Rake::Task["db:
|
|
7
|
+
Rake::Task["db:drop_schema"].execute
|
|
8
|
+
Rake::Task["db:create_schema"].execute
|
|
9
9
|
Rake::Task["db:migrate"].execute
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -14,8 +14,6 @@ namespace :db do
|
|
|
14
14
|
|
|
15
15
|
puts "Db Migrating... #{db_config[:dbname]}"
|
|
16
16
|
pg = PG::EM::Client.new(db_config)
|
|
17
|
-
|
|
18
|
-
|
|
19
17
|
|
|
20
18
|
Actn::DB.paths.uniq.each do |path|
|
|
21
19
|
|
|
@@ -24,15 +22,18 @@ namespace :db do
|
|
|
24
22
|
pg.exec(File.read("#{path}/db/__setup.sql")) if File.exists?("#{path}/db/__setup.sql")
|
|
25
23
|
|
|
26
24
|
if File.exists?("#{path}/db/lib")
|
|
27
|
-
`coffee --compile --output #{path}/db/lib #{path}/db/lib` rescue nil
|
|
25
|
+
`coffee --bare --compile --output #{path}/db/lib #{path}/db/lib` rescue nil
|
|
28
26
|
|
|
29
27
|
Dir.glob("#{path}/db/lib/*.js").each do |js|
|
|
30
|
-
name = File.basename(js,".js").split("_").last
|
|
28
|
+
# name = File.basename(js,".js").split("_").last
|
|
29
|
+
name = File.basename(js,".js")[1..-1]
|
|
31
30
|
sql = "INSERT INTO plv8_modules values ($1,true,$2)"
|
|
32
31
|
pg.exec_params(sql,[name,File.read(js)])
|
|
33
32
|
end
|
|
34
33
|
end
|
|
35
34
|
|
|
35
|
+
pg.exec "SELECT plv8_startup();"
|
|
36
|
+
|
|
36
37
|
pg.exec(File.read("#{path}/db/__functions.sql")) if File.exists?("#{path}/db/__functions.sql")
|
|
37
38
|
|
|
38
39
|
if File.exists?("#{path}/db/")
|
|
@@ -59,22 +60,34 @@ namespace :db do
|
|
|
59
60
|
|
|
60
61
|
puts "#{name} inserted:#{inserted} updated:#{updated}"
|
|
61
62
|
end
|
|
62
|
-
|
|
63
|
-
pg.exec "SELECT plv8_startup();"
|
|
64
|
-
|
|
63
|
+
|
|
65
64
|
end
|
|
66
65
|
|
|
67
|
-
|
|
68
66
|
end
|
|
69
67
|
|
|
70
68
|
end
|
|
69
|
+
|
|
70
|
+
desc 'Drops all schemas'
|
|
71
|
+
task :drop_schema do
|
|
72
|
+
puts "Db Dropping... #{db_config[:dbname]}"
|
|
73
|
+
pg = PG::EM::Client.new(db_config)
|
|
74
|
+
pg.exec "drop schema public cascade;"
|
|
75
|
+
pg.exec "drop schema if exists core cascade;"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
desc 'Creates public schema'
|
|
79
|
+
task :create_schema do
|
|
80
|
+
puts "Db Creating... #{db_config[:dbname]}"
|
|
81
|
+
pg = PG::EM::Client.new(db_config)
|
|
82
|
+
pg.exec "create schema public;"
|
|
83
|
+
end
|
|
71
84
|
|
|
72
85
|
desc 'Drops the database'
|
|
73
86
|
task :drop do
|
|
74
87
|
puts "Db Dropping... #{db_config[:dbname]}"
|
|
75
88
|
pg = PG::EM::Client.new(pg_config)
|
|
76
89
|
sql = "DROP DATABASE IF EXISTS \"%s\";" % [db_config[:dbname]]
|
|
77
|
-
pg.exec(sql)
|
|
90
|
+
pg.exec(sql)
|
|
78
91
|
end
|
|
79
92
|
|
|
80
93
|
desc 'Creates the database'
|
data/lib/actn/db/version.rb
CHANGED
data/test/actn/test_model.rb
CHANGED
data/test/minitest_helper.rb
CHANGED
|
@@ -5,7 +5,7 @@ require 'minitest/autorun'
|
|
|
5
5
|
require 'minitest/pride'
|
|
6
6
|
|
|
7
7
|
ENV['RACK_ENV'] = "test"
|
|
8
|
-
ENV['DATABASE_URL']
|
|
8
|
+
ENV['DATABASE_URL'] ||= "postgres://localhost:5432/actn_test"
|
|
9
9
|
|
|
10
10
|
I18n.enforce_available_locales = false
|
|
11
11
|
|
|
@@ -15,4 +15,4 @@ class MiniTest::Test
|
|
|
15
15
|
def random_str
|
|
16
16
|
(0...8).map { (65 + rand(26)).chr }.join
|
|
17
17
|
end
|
|
18
|
-
end
|
|
18
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: actn-db
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Onur Uyar
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-10-
|
|
11
|
+
date: 2014-10-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -153,12 +153,14 @@ files:
|
|
|
153
153
|
- db/1_db.sql
|
|
154
154
|
- db/__functions.sql
|
|
155
155
|
- db/__setup.sql
|
|
156
|
-
- db/lib/
|
|
157
|
-
- db/lib/
|
|
156
|
+
- db/lib/_0_underscore.js
|
|
157
|
+
- db/lib/_1_inflections.js
|
|
158
158
|
- db/lib/_2_jjv.js
|
|
159
|
-
- db/lib/
|
|
160
|
-
- db/lib/
|
|
161
|
-
- db/lib/
|
|
159
|
+
- db/lib/_3_actn.js
|
|
160
|
+
- db/lib/_4_functions.coffee
|
|
161
|
+
- db/lib/_4_functions.js
|
|
162
|
+
- db/lib/_5_builder.coffee
|
|
163
|
+
- db/lib/_5_builder.js
|
|
162
164
|
- db/schemas/model.json
|
|
163
165
|
- lib/actn/core_ext/hash.rb
|
|
164
166
|
- lib/actn/core_ext/kernel.rb
|
data/db/lib/_0_actn.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
global = (function() {
|
|
2
|
-
return this;
|
|
3
|
-
}).call(null);
|
|
4
|
-
|
|
5
|
-
var Actn = (function() {
|
|
6
|
-
function Actn() {}
|
|
7
|
-
|
|
8
|
-
Actn.prototype.valueAt = function(data, key) {
|
|
9
|
-
var i, keys;
|
|
10
|
-
keys = key.split(".");
|
|
11
|
-
for (i in keys) {
|
|
12
|
-
if (data != null) {
|
|
13
|
-
data = data[keys[i]];
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return data;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
return Actn;
|
|
20
|
-
|
|
21
|
-
})();
|
|
22
|
-
|
|
23
|
-
actn = new Actn();
|
data/db/lib/_4_builder.coffee
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
class Builder
|
|
2
|
-
|
|
3
|
-
constructor: (@schema_name, @table_name, @search_path, @query) ->
|
|
4
|
-
@query.select ?= "*"
|
|
5
|
-
@params = []
|
|
6
|
-
@i = 0
|
|
7
|
-
|
|
8
|
-
qm: -> "$#{@i += 1}"
|
|
9
|
-
|
|
10
|
-
make_select: ->
|
|
11
|
-
if @query?.select?.indexOf('COUNT') > -1
|
|
12
|
-
@query.select
|
|
13
|
-
else
|
|
14
|
-
if @query.select is "*"
|
|
15
|
-
"data"
|
|
16
|
-
else
|
|
17
|
-
@params.push _.flatten([@query.select]).join(".")
|
|
18
|
-
"__select(data, #{@qm()}) as data" #::text
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
make_where: (q, join_by = 'AND') ->
|
|
22
|
-
sql = []
|
|
23
|
-
for k, subquery of q
|
|
24
|
-
switch k
|
|
25
|
-
when 'and', 'AND', '&', '&&'
|
|
26
|
-
sql.push "(#{make_where(subquery, 'AND')})"
|
|
27
|
-
when 'or', 'OR', '|', '||'
|
|
28
|
-
sql.push "(#{make_where(subquery, 'OR')})"
|
|
29
|
-
when 'not', 'NOT', '!'
|
|
30
|
-
sql.push "NOT (#{make_where(subquery, 'AND')})"
|
|
31
|
-
else
|
|
32
|
-
if _.isArray(subquery)
|
|
33
|
-
@params.push k
|
|
34
|
-
@params.push subquery[1]
|
|
35
|
-
sql.push "#{@plv8_key(subquery[1])} #{subquery[0]} #{@plv8_qm(subquery[1])}"
|
|
36
|
-
else if _.isObject(subquery)
|
|
37
|
-
comparisons = []
|
|
38
|
-
for symbol, value in subquery
|
|
39
|
-
comparisons.push "#{symbol} #{@plv8_qm(value)}"
|
|
40
|
-
@params.push k
|
|
41
|
-
@params.push value
|
|
42
|
-
sql.push _.map(comparisons, (comparison) -> "#{@plv8_key(value)} #{comparison}").join(" AND ")
|
|
43
|
-
else
|
|
44
|
-
@params.push k
|
|
45
|
-
@params.push subquery
|
|
46
|
-
sql.push "#{@plv8_key(subquery)} = #{@plv8_qm(subquery)}"
|
|
47
|
-
|
|
48
|
-
sql.join "\n#{join_by} "
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
make_order_by: () ->
|
|
52
|
-
ord = @query.order_by
|
|
53
|
-
str = []
|
|
54
|
-
if _.isArray(ord)
|
|
55
|
-
@params.push ord[0]
|
|
56
|
-
str.push "#{@plv8_key(ord[1])} #{ord[1].toUpperCase()}"
|
|
57
|
-
else if _.isObject(ord)
|
|
58
|
-
for k,v in ord
|
|
59
|
-
@params.push v
|
|
60
|
-
str.push "#{@plv8_key(k)} #{k.toUpperCase()}"
|
|
61
|
-
else
|
|
62
|
-
@params.push ord
|
|
63
|
-
str.push @qm()
|
|
64
|
-
str.join(",")
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
make_limit: ->
|
|
68
|
-
@params.push @query.limit
|
|
69
|
-
@qm()
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
make_offset: ->
|
|
73
|
-
@params.push @query.offset
|
|
74
|
-
@qm()
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
build_select: ->
|
|
78
|
-
sql = []
|
|
79
|
-
sql.push "SET search_path TO #{@search_path};"
|
|
80
|
-
sql.push "SELECT #{@make_select()} FROM #{@schema_name}.#{@table_name}"
|
|
81
|
-
sql.push "WHERE #{@make_where(@query.where)}" unless _.isEmpty(@query.where)
|
|
82
|
-
sql.push "ORDER BY #{@make_order()}" if @query.order_by?
|
|
83
|
-
sql.push "LIMIT #{@make_limit()}" if @query.limit?
|
|
84
|
-
sql.push "OFFSET #{@make_offset()}" if @query.offset?
|
|
85
|
-
[sql.join("\n"), @params]
|
|
86
|
-
|
|
87
|
-
build_delete: ->
|
|
88
|
-
sql = []
|
|
89
|
-
sql.push "SET search_path TO #{@search_path};"
|
|
90
|
-
sql.push "DELETE FROM #{@schema_name}.#{@table_name}"
|
|
91
|
-
sql.push "WHERE #{@make_where(@query.where)}" unless _.isEmpty(@query.where)
|
|
92
|
-
sql.push "RETURNING data::json;"
|
|
93
|
-
[sql.join("\n"), @params]
|
|
94
|
-
|
|
95
|
-
build_update: (data, merge = true) ->
|
|
96
|
-
|
|
97
|
-
@params.push data
|
|
98
|
-
@params.push merge
|
|
99
|
-
sql = []
|
|
100
|
-
sql.push "SET search_path TO #{@search_path};"
|
|
101
|
-
sql.push "UPDATE #{@schema_name}.#{@table_name} SET data = __patch(data,#{@qm()},#{@qm()})"
|
|
102
|
-
sql.push "WHERE #{@make_where(@query.where)}" unless _.isEmpty(@query.where)
|
|
103
|
-
sql.push "RETURNING data::json;"
|
|
104
|
-
[sql.join("\n"), @params]
|
|
105
|
-
|
|
106
|
-
build_insert: (data, merge = true) ->
|
|
107
|
-
@params.push data
|
|
108
|
-
@params.push merge
|
|
109
|
-
sql = []
|
|
110
|
-
sql.push "SET search_path TO #{@search_path};"
|
|
111
|
-
sql.push "INSERT INTO #{@schema_name}.#{@table_name} (data) VALUES (__patch(__defaults(),#{@qm()},#{@qm()}))"
|
|
112
|
-
sql.push "RETURNING data::json;"
|
|
113
|
-
[sql.join("\n"), @params]
|
|
114
|
-
|
|
115
|
-
plv8_key: (value) -> "#{@typecast(value,true)}(data, #{@qm()}::text)" #::text
|
|
116
|
-
|
|
117
|
-
plv8_qm: (value) -> "#{@qm()}::#{@typecast(value)}"
|
|
118
|
-
|
|
119
|
-
typecast: (value, is_func = false) ->
|
|
120
|
-
type = if is_func then "__" else ""
|
|
121
|
-
if _.isBoolean(value)
|
|
122
|
-
type += "bool"
|
|
123
|
-
else if _.isDate(value)
|
|
124
|
-
type += "timestamp"
|
|
125
|
-
else if _.isNumber(value)
|
|
126
|
-
type += "integer"
|
|
127
|
-
else if _.isObject(value)
|
|
128
|
-
type += (if is_func then "text" else "json")
|
|
129
|
-
else if _.isArray(value)
|
|
130
|
-
type += (if is_func then "text" else "array")
|
|
131
|
-
else
|
|
132
|
-
type += (if is_func then "string" else "text")
|
|
133
|
-
type
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
actn.Builder = Builder
|