tranfi 0.1.2 → 0.2.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.
- package/LICENSE +177 -0
- package/NOTICE +8 -0
- package/README.md +272 -40
- package/app/assets/{index-pDFMluyz.js → index-BIAIKnrp.js} +1 -1
- package/app/index.html +1 -1
- package/binding.gyp +55 -3
- package/csrc/arena.c +7 -5
- package/csrc/batch.c +818 -71
- package/csrc/buffer.c +84 -8
- package/csrc/cJSON.c +262 -19
- package/csrc/cJSON.h +17 -1
- package/csrc/codec_csv.c +1074 -181
- package/csrc/codec_jsonl.c +830 -118
- package/csrc/codec_table.c +108 -78
- package/csrc/codec_text.c +286 -68
- package/csrc/compiler.c +31 -3
- package/csrc/config.h +21 -0
- package/csrc/dsl.c +4722 -485
- package/csrc/expr.c +363 -55
- package/csrc/expr.h +2 -0
- package/csrc/internal.h +316 -27
- package/csrc/ir.c +65 -18
- package/csrc/ir.h +41 -0
- package/csrc/ir_schema.c +20 -5
- package/csrc/ir_serialize.c +68 -6
- package/csrc/ir_sql.c +796 -185
- package/csrc/ir_validate.c +462 -6
- package/csrc/json_path.c +210 -0
- package/csrc/main.c +879 -30
- package/csrc/memory_estimate.c +477 -0
- package/csrc/op_acf.c +171 -21
- package/csrc/op_across.c +477 -0
- package/csrc/op_anomaly.c +167 -32
- package/csrc/op_assert.c +761 -0
- package/csrc/op_bin.c +168 -29
- package/csrc/op_cast.c +383 -55
- package/csrc/op_clip.c +30 -19
- package/csrc/op_date_trunc.c +208 -34
- package/csrc/op_datetime.c +259 -77
- package/csrc/op_derive.c +65 -97
- package/csrc/op_diff.c +146 -30
- package/csrc/op_ewma.c +149 -30
- package/csrc/op_explode.c +124 -26
- package/csrc/op_fill_down.c +125 -53
- package/csrc/op_fill_null.c +176 -31
- package/csrc/op_filter.c +89 -40
- package/csrc/op_frequency.c +571 -43
- package/csrc/op_grep.c +36 -18
- package/csrc/op_group_agg.c +1790 -119
- package/csrc/op_hash.c +48 -15
- package/csrc/op_head.c +21 -86
- package/csrc/op_interpolate.c +268 -62
- package/csrc/op_join.c +2700 -182
- package/csrc/op_json_extract.c +227 -0
- package/csrc/op_json_filter.c +384 -0
- package/csrc/op_json_flatten.c +293 -0
- package/csrc/op_json_schema.c +503 -0
- package/csrc/op_label_encode.c +328 -53
- package/csrc/op_lag.c +181 -0
- package/csrc/op_lead.c +141 -89
- package/csrc/op_normalize.c +363 -79
- package/csrc/op_onehot.c +345 -73
- package/csrc/op_pivot.c +1546 -162
- package/csrc/op_quarantine.c +189 -0
- package/csrc/op_registry.c +2062 -166
- package/csrc/op_rename.c +41 -50
- package/csrc/op_replace.c +270 -118
- package/csrc/op_rleid.c +297 -0
- package/csrc/op_rowid.c +559 -0
- package/csrc/op_sample.c +80 -23
- package/csrc/op_schema.c +1341 -0
- package/csrc/op_schema_infer.c +252 -0
- package/csrc/op_select.c +265 -65
- package/csrc/op_set.c +3449 -0
- package/csrc/op_skip.c +30 -87
- package/csrc/op_sort.c +670 -124
- package/csrc/op_source_name.c +120 -0
- package/csrc/op_split.c +65 -28
- package/csrc/op_split_data.c +41 -9
- package/csrc/op_stack.c +178 -222
- package/csrc/op_stats.c +206 -110
- package/csrc/op_step.c +217 -55
- package/csrc/op_tail.c +21 -12
- package/csrc/op_tee.c +338 -0
- package/csrc/op_top.c +260 -53
- package/csrc/op_trim.c +48 -19
- package/csrc/op_unique.c +1193 -150
- package/csrc/op_unpivot.c +100 -66
- package/csrc/op_validate.c +601 -24
- package/csrc/op_window.c +492 -51
- package/csrc/path_policy.c +85 -0
- package/csrc/pipeline.c +872 -99
- package/csrc/recipes.c +3 -1
- package/csrc/report.c +73 -30
- package/csrc/selector.c +1097 -0
- package/csrc/size_utils.c +348 -0
- package/csrc/spill.c +317 -0
- package/csrc/spill.h +21 -0
- package/csrc/tranfi.h +169 -1
- package/csrc/transform.h +209 -0
- package/csrc/transform_api.c +2237 -0
- package/csrc/transform_categorical.c +923 -0
- package/csrc/transform_internal.h +472 -0
- package/csrc/transform_json.c +3812 -0
- package/csrc/transform_numeric.c +1966 -0
- package/csrc/transform_sha256.c +154 -0
- package/csrc/transform_wasm.h +162 -0
- package/csrc/transform_wasm_api.c +1373 -0
- package/csrc/wasm_api.c +70 -9
- package/napi_api.c +219 -11
- package/napi_transform.c +1648 -0
- package/napi_transform.h +8 -0
- package/package.json +27 -11
- package/scripts/install-native.js +76 -0
- package/scripts/prepack.js +64 -0
- package/scripts/sync-csrc.js +23 -0
- package/src/cli.js +8 -11
- package/src/engines/duckdb.js +45 -12
- package/src/index.js +661 -42
- package/src/memory_policy.js +411 -0
- package/src/native.js +1 -5
- package/src/pipeline.js +454 -31
- package/src/recipe_json.js +80 -0
- package/src/server.js +10 -8
- package/src/transform.js +403 -0
- package/src/transform_error.js +10 -0
- package/src/wasm.js +6 -4
- package/wasm/index.js +498 -10
- package/wasm/tranfi_core.js +0 -0
- package/wasm/transform.js +1156 -0
- package/wasm/worker.js +786 -0
- package/csrc/plan.c +0 -206
package/csrc/op_skip.c
CHANGED
|
@@ -21,102 +21,44 @@ static int skip_process(tf_step *self, tf_batch *in, tf_batch **out,
|
|
|
21
21
|
skip_state *st = self->state;
|
|
22
22
|
*out = NULL;
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
size_t emit_start = 0;
|
|
25
|
+
size_t next_seen = st->seen;
|
|
26
|
+
if (st->seen < st->n) {
|
|
27
|
+
size_t remaining_skip = st->n - st->seen;
|
|
28
|
+
if (remaining_skip >= in->n_rows) {
|
|
29
|
+
/* Skip entire batch */
|
|
30
|
+
st->seen += in->n_rows;
|
|
31
|
+
return TF_OK;
|
|
30
32
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
for (size_t c = 0; c < in->n_cols; c++) {
|
|
34
|
-
if (tf_batch_is_null(in, r, c)) {
|
|
35
|
-
tf_batch_set_null(ob, r, c);
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
switch (in->col_types[c]) {
|
|
39
|
-
case TF_TYPE_BOOL:
|
|
40
|
-
tf_batch_set_bool(ob, r, c, tf_batch_get_bool(in, r, c));
|
|
41
|
-
break;
|
|
42
|
-
case TF_TYPE_INT64:
|
|
43
|
-
tf_batch_set_int64(ob, r, c, tf_batch_get_int64(in, r, c));
|
|
44
|
-
break;
|
|
45
|
-
case TF_TYPE_FLOAT64:
|
|
46
|
-
tf_batch_set_float64(ob, r, c, tf_batch_get_float64(in, r, c));
|
|
47
|
-
break;
|
|
48
|
-
case TF_TYPE_STRING:
|
|
49
|
-
tf_batch_set_string(ob, r, c, tf_batch_get_string(in, r, c));
|
|
50
|
-
break;
|
|
51
|
-
case TF_TYPE_DATE:
|
|
52
|
-
tf_batch_set_date(ob, r, c, tf_batch_get_date(in, r, c));
|
|
53
|
-
break;
|
|
54
|
-
case TF_TYPE_TIMESTAMP:
|
|
55
|
-
tf_batch_set_timestamp(ob, r, c, tf_batch_get_timestamp(in, r, c));
|
|
56
|
-
break;
|
|
57
|
-
default:
|
|
58
|
-
tf_batch_set_null(ob, r, c);
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
ob->n_rows = r + 1;
|
|
63
|
-
}
|
|
64
|
-
*out = ob;
|
|
65
|
-
return TF_OK;
|
|
33
|
+
emit_start = remaining_skip;
|
|
34
|
+
next_seen = st->n;
|
|
66
35
|
}
|
|
67
36
|
|
|
68
|
-
size_t
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
/* Skip entire batch */
|
|
72
|
-
st->seen += in->n_rows;
|
|
37
|
+
size_t emit_count = in->n_rows - emit_start;
|
|
38
|
+
if (emit_count == 0) {
|
|
39
|
+
st->seen = next_seen;
|
|
73
40
|
return TF_OK;
|
|
74
41
|
}
|
|
75
42
|
|
|
76
|
-
/* Partial skip — emit rows after the skip region */
|
|
77
|
-
size_t emit_start = remaining_skip;
|
|
78
|
-
size_t emit_count = in->n_rows - emit_start;
|
|
79
|
-
st->seen = st->n;
|
|
80
|
-
|
|
81
43
|
tf_batch *ob = tf_batch_create(in->n_cols, emit_count);
|
|
82
44
|
if (!ob) return TF_ERROR;
|
|
83
|
-
|
|
84
|
-
|
|
45
|
+
if (tf_batch_clone_schema(ob, in) != TF_OK) {
|
|
46
|
+
tf_batch_free(ob);
|
|
47
|
+
return TF_ERROR;
|
|
85
48
|
}
|
|
86
49
|
for (size_t i = 0; i < emit_count; i++) {
|
|
87
50
|
size_t r = emit_start + i;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
case TF_TYPE_BOOL:
|
|
96
|
-
tf_batch_set_bool(ob, i, c, tf_batch_get_bool(in, r, c));
|
|
97
|
-
break;
|
|
98
|
-
case TF_TYPE_INT64:
|
|
99
|
-
tf_batch_set_int64(ob, i, c, tf_batch_get_int64(in, r, c));
|
|
100
|
-
break;
|
|
101
|
-
case TF_TYPE_FLOAT64:
|
|
102
|
-
tf_batch_set_float64(ob, i, c, tf_batch_get_float64(in, r, c));
|
|
103
|
-
break;
|
|
104
|
-
case TF_TYPE_STRING:
|
|
105
|
-
tf_batch_set_string(ob, i, c, tf_batch_get_string(in, r, c));
|
|
106
|
-
break;
|
|
107
|
-
case TF_TYPE_DATE:
|
|
108
|
-
tf_batch_set_date(ob, i, c, tf_batch_get_date(in, r, c));
|
|
109
|
-
break;
|
|
110
|
-
case TF_TYPE_TIMESTAMP:
|
|
111
|
-
tf_batch_set_timestamp(ob, i, c, tf_batch_get_timestamp(in, r, c));
|
|
112
|
-
break;
|
|
113
|
-
default:
|
|
114
|
-
tf_batch_set_null(ob, i, c);
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
51
|
+
if (tf_batch_copy_row(ob, i, in, r) != TF_OK) {
|
|
52
|
+
tf_batch_free(ob);
|
|
53
|
+
return TF_ERROR;
|
|
54
|
+
}
|
|
55
|
+
if (tf_batch_expose_row(ob, i) != TF_OK) {
|
|
56
|
+
tf_batch_free(ob);
|
|
57
|
+
return TF_ERROR;
|
|
117
58
|
}
|
|
118
|
-
ob->n_rows = i + 1;
|
|
119
59
|
}
|
|
60
|
+
|
|
61
|
+
st->seen = next_seen;
|
|
120
62
|
*out = ob;
|
|
121
63
|
return TF_OK;
|
|
122
64
|
}
|
|
@@ -134,15 +76,16 @@ static void skip_destroy(tf_step *self) {
|
|
|
134
76
|
|
|
135
77
|
tf_step *tf_skip_create(const cJSON *args) {
|
|
136
78
|
if (!args) return NULL;
|
|
137
|
-
|
|
138
|
-
|
|
79
|
+
size_t n = 0;
|
|
80
|
+
int has_n = tf_json_get_size_arg(args, "n", 0, TF_MAX_COUNT_ARG, &n, "skip");
|
|
81
|
+
if (has_n <= 0) return NULL;
|
|
139
82
|
|
|
140
83
|
skip_state *st = calloc(1, sizeof(skip_state));
|
|
141
84
|
if (!st) return NULL;
|
|
142
|
-
st->n =
|
|
85
|
+
st->n = n;
|
|
143
86
|
st->seen = 0;
|
|
144
87
|
|
|
145
|
-
tf_step *step =
|
|
88
|
+
tf_step *step = calloc(1, sizeof(tf_step));
|
|
146
89
|
if (!step) { free(st); return NULL; }
|
|
147
90
|
step->process = skip_process;
|
|
148
91
|
step->flush = skip_flush;
|