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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 788df7b5953f68a917e57a8508b51aa89e1ca404b91480bcbd132b3cd7666905
4
- data.tar.gz: 00123c1ab2294b5e274942e65ec507561834b259b45e4ad636e3ffe4f269e996
3
+ metadata.gz: f8d1e99a862ad8d34b330ee50d92afdbf3c6aa11c8111621213e5794dd18830c
4
+ data.tar.gz: ac8a414a0bb4e0830aea306d80901370efdf77a4a9a9ddc159d79869f0a95410
5
5
  SHA512:
6
- metadata.gz: 68cac774b3aa673896b68201e6e3667075cf9fc53d943c9f48aac130c5bb801903ce15f5e68523d46c53dc98c2d9df1b23210f84a0e7c628653c40861418d2cb
7
- data.tar.gz: 3216c9889ca95b84814ca69c85f42c1f972c0e3093baae37338b09c9fce325064df5ed60d2709334e0250e0eabdd357cbf2cf23088c2dadeaed50fe2ea416369
6
+ metadata.gz: a9163e4fb93266b5ba646fd21f88c75d85a321e20aa0cb6e55ccb331aa41f4722d3695b8af126c77f3857ffd7240966a55e7b4c16c908bd5c8471b30b9da7265
7
+ data.tar.gz: 4221dc18f6a1b03799d519df61c80828fd9f4b25353a22eee076f97959a25865224145f7403d5f05988394170b0d69be15720b9bcb6df1b7c3039b51b4d19d19
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.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 build(code, _task)
36
- # Replace parameter placeholders
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_; CREATE TABLE :_name_ AS (#{processed_code});"
62
+ sql_parts << "DROP TABLE IF EXISTS :_name_;"
63
+ sql_parts << "CREATE TABLE :_name_ AS (#{main_sql});"
45
64
  when :adhoc
46
- "COPY (#{processed_code}) TO ':output:' (FORMAT PARQUET);"
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
- #{duckdb_cmd} -c "$(cat #{fname} | sed 's|:_name_|#{task.output_stem}|g')" | tee #{fname}.log
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.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
@@ -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