raka 0.4.0 → 0.5.0
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/VERSION +1 -1
- data/lib/raka/lang/duckdb/impl.rb +32 -6
- metadata +1 -2
- data/lib/raka/interface.rbs +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8d1e99a862ad8d34b330ee50d92afdbf3c6aa11c8111621213e5794dd18830c
|
4
|
+
data.tar.gz: ac8a414a0bb4e0830aea306d80901370efdf77a4a9a9ddc159d79869f0a95410
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9163e4fb93266b5ba646fd21f88c75d85a321e20aa0cb6e55ccb331aa41f4722d3695b8af126c77f3857ffd7240966a55e7b4c16c908bd5c8471b30b9da7265
|
7
|
+
data.tar.gz: 4221dc18f6a1b03799d519df61c80828fd9f4b25353a22eee076f97959a25865224145f7403d5f05988394170b0d69be15720b9bcb6df1b7c3039b51b4d19d19
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
@@ -17,10 +17,12 @@ end
|
|
17
17
|
# 1. Persistent mode: operations on .db file with CREATE TABLE
|
18
18
|
# 2. Ad-hoc mode: parquet in/out using COPY operations
|
19
19
|
class Duckdb
|
20
|
-
def initialize(database: nil, params: {})
|
20
|
+
def initialize(database: nil, params: {}, before: nil, after: nil)
|
21
21
|
@params = params
|
22
22
|
@database = database
|
23
23
|
@mode = @database ? :persistent : :adhoc
|
24
|
+
@before = before
|
25
|
+
@after = after
|
24
26
|
end
|
25
27
|
|
26
28
|
def duckdb_cmd
|
@@ -32,26 +34,50 @@ class Duckdb
|
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
35
|
-
def
|
36
|
-
|
37
|
+
def process_params(code)
|
38
|
+
return code if code.nil?
|
39
|
+
|
37
40
|
processed_code = code
|
38
41
|
(@params || {}).each do |key, value|
|
39
42
|
processed_code = processed_code.gsub("$#{key}", "'#{value}'")
|
40
43
|
end
|
44
|
+
processed_code
|
45
|
+
end
|
46
|
+
|
47
|
+
def build(code, _task)
|
48
|
+
# Process parameter placeholders for all parts
|
49
|
+
main_sql = process_params(code)
|
50
|
+
before_sql = process_params(@before)
|
51
|
+
after_sql = process_params(@after)
|
41
52
|
|
53
|
+
# Build SQL parts as separate statements
|
54
|
+
sql_parts = []
|
55
|
+
|
56
|
+
# Add before hook if present
|
57
|
+
sql_parts << before_sql if before_sql
|
58
|
+
|
59
|
+
# Add main query based on mode
|
42
60
|
case @mode
|
43
61
|
when :persistent
|
44
|
-
"DROP TABLE IF EXISTS :_name_;
|
62
|
+
sql_parts << "DROP TABLE IF EXISTS :_name_;"
|
63
|
+
sql_parts << "CREATE TABLE :_name_ AS (#{main_sql});"
|
45
64
|
when :adhoc
|
46
|
-
"COPY (#{
|
65
|
+
sql_parts << "COPY (#{main_sql}) TO ':output:' (FORMAT PARQUET);"
|
47
66
|
end
|
67
|
+
|
68
|
+
# Add after hook if present
|
69
|
+
sql_parts << after_sql if after_sql
|
70
|
+
|
71
|
+
sql_parts.join("\n")
|
48
72
|
end
|
49
73
|
|
50
74
|
def run_script(env, fname, task)
|
51
75
|
case @mode
|
52
76
|
when :persistent
|
77
|
+
# Split the SQL into separate statements and execute them individually
|
53
78
|
bash env, %(
|
54
|
-
#
|
79
|
+
# Execute the combined SQL script with proper variable replacement
|
80
|
+
cat #{fname} | sed 's|:_name_|#{task.output_stem}|g' | #{duckdb_cmd} | tee #{fname}.log
|
55
81
|
echo "#{@database}" > #{task.name}
|
56
82
|
)
|
57
83
|
when :adhoc
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yarray
|
@@ -123,7 +123,6 @@ files:
|
|
123
123
|
- bin/raka
|
124
124
|
- lib/raka.rb
|
125
125
|
- lib/raka/compile.rb
|
126
|
-
- lib/raka/interface.rbs
|
127
126
|
- lib/raka/lang/duckdb/impl.rb
|
128
127
|
- lib/raka/lang/psql/impl.rb
|
129
128
|
- lib/raka/lang/python/impl.rb
|
data/lib/raka/interface.rbs
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
class RakaTask
|
2
|
-
attr_reader name: String
|
3
|
-
attr_reader stem: String
|
4
|
-
attr_reader func: String?
|
5
|
-
attr_reader input_stem: String?
|
6
|
-
attr_reader scope: String?
|
7
|
-
attr_reader target_scope: String?
|
8
|
-
attr_reader scopes: Array[String]
|
9
|
-
attr_reader target_scope_captures: Array[String]
|
10
|
-
attr_reader captures: Hash[String, String]
|
11
|
-
attr_reader deps: Array[String]
|
12
|
-
attr_reader deps_str: String
|
13
|
-
attr_reader input: String
|
14
|
-
attr_reader task: Object # RakeTask
|
15
|
-
end
|
16
|
-
|
17
|
-
class RakaEnv
|
18
|
-
end
|
19
|
-
|
20
|
-
class LanguageImpl
|
21
|
-
def build: (String code, RakaTask task) -> String
|
22
|
-
def run_script: (RakaEnv env, String fname, RakaTask task) -> nil
|
23
|
-
end
|