sqlmath 2026.7.30 → 2026.9.29

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/CHANGELOG.md CHANGED
@@ -7,6 +7,22 @@
7
7
  - sqlite - Add similar error-handling from builtin-sql-function PERCENTILE() into custom-sql-function QUANTILE().
8
8
  - none
9
9
 
10
+ # v2026.9.29
11
+ - sqlmath - Update sql-function WIN_COINFLIP2() to calculate 'biasba50' - balanced-accuracy-minus-50.
12
+ - jslint-ecma - Add Exponentiation-assignment-operator '**=' support.
13
+ - jslint-cli - Add cli-option jslint_autofix=filename to autofix whitespace-warnings, and add function jslint_phase6_autofix().
14
+ - jslint-ecma - Add ES2018-feature Asynchronous Iteration - for await...of.
15
+ - jslint-cli - Skip dotfiles when linting a directory.
16
+
17
+ # v2026.8.31
18
+ - jslint-ci - Update ci-shell-function shGitLsTree() to include sha256 hash of files.
19
+ - sqlmath - Cleanup c-function winSinefitSnr().
20
+ - sqlmath - Update sql-function WIN_SINEFIT2() argument modeSnr with bitmask, allowing selective sine-fit of each column, to avoid wasting cpu on columns that don't need it.
21
+ - lgbm - Upgrade to lightgbm-v4.7.0.
22
+ - sqlite - Upgrade to sqlite-v3.51.3.
23
+ - sqlmath - Remove obsolete sql-functions MEDIAN2(), QUANTILE(), superseded by sqlite-builtins.
24
+ - sqlmath - Fix c-header conflict between dlfcn.h and Python.h.
25
+
10
26
  # v2026.7.30
11
27
  - jslint-ecma - Add ES2015-feature for..of.
12
28
  - jslint - Change scope from scope_function to scope_block:
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  # Status
11
11
 
12
- | Branch | [master<br>(v2026.7.30)](https://github.com/sqlmath/sqlmath/tree/master) | [beta<br>(Web Demo)](https://github.com/sqlmath/sqlmath/tree/beta) | [alpha<br>(Development)](https://github.com/sqlmath/sqlmath/tree/alpha) |
12
+ | Branch | [master<br>(v2026.9.29)](https://github.com/sqlmath/sqlmath/tree/master) | [beta<br>(Web Demo)](https://github.com/sqlmath/sqlmath/tree/beta) | [alpha<br>(Development)](https://github.com/sqlmath/sqlmath/tree/alpha) |
13
13
  |--:|:--:|:--:|:--:|
14
14
  | CI | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Amaster) | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=beta)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Abeta) | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=alpha)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Aalpha) |
15
15
  | Coverage | [![coverage](https://sqlmath.github.io/sqlmath/branch-master/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-master/.artifact/coverage/index.html) | [![coverage](https://sqlmath.github.io/sqlmath/branch-beta/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-beta/.artifact/coverage/index.html) | [![coverage](https://sqlmath.github.io/sqlmath/branch-alpha/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-alpha/.artifact/coverage/index.html) |
@@ -18,6 +18,7 @@
18
18
 
19
19
 
20
20
  <br><br>
21
+
21
22
  # Table of Contents
22
23
 
23
24
  1. [Web Demo](#web-demo)
@@ -78,6 +79,7 @@
78
79
 
79
80
 
80
81
  <br><br>
82
+
81
83
  # Web Demo
82
84
  - https://sqlmath.github.io/sqlmath/index.html
83
85
 
@@ -85,6 +87,7 @@
85
87
 
86
88
 
87
89
  <br><br>
90
+
88
91
  # Why sqlmath?
89
92
 
90
93
  SQLite is everywhere — it's the most deployed database in the world. But it lacks the statistical and ML functions needed for data-science. sqlmath fixes that.
@@ -97,10 +100,12 @@ SQLite is everywhere — it's the most deployed database in the world. But it la
97
100
 
98
101
 
99
102
  <br><br>
103
+
100
104
  # Quickstart
101
105
 
102
106
 
103
107
  <br><br>
108
+
104
109
  ### Python
105
110
 
106
111
  ```shell
@@ -135,6 +140,7 @@ db_close(db)
135
140
 
136
141
 
137
142
  <br><br>
143
+
138
144
  ### JavaScript (Node.js)
139
145
 
140
146
  ```shell
@@ -165,16 +171,19 @@ await dbCloseAsync(db);
165
171
 
166
172
 
167
173
  <br><br>
174
+
168
175
  ### Browser (WebAssembly)
169
176
 
170
177
  Try it live: **[sqlmath.github.io/sqlmath](https://sqlmath.github.io/sqlmath/index.html)**
171
178
 
172
179
 
173
180
  <br><br>
181
+
174
182
  # Built-in SQL Functions
175
183
 
176
184
 
177
185
  <br><br>
186
+
178
187
  ### Math
179
188
 
180
189
  | Function | Description |
@@ -190,6 +199,7 @@ Try it live: **[sqlmath.github.io/sqlmath](https://sqlmath.github.io/sqlmath/ind
190
199
 
191
200
 
192
201
  <br><br>
202
+
193
203
  ### Statistics (Aggregate)
194
204
 
195
205
  | Function | Description |
@@ -201,6 +211,7 @@ Try it live: **[sqlmath.github.io/sqlmath](https://sqlmath.github.io/sqlmath/ind
201
211
 
202
212
 
203
213
  <br><br>
214
+
204
215
  ### Statistics (Scalar)
205
216
 
206
217
  | Function | Description |
@@ -210,6 +221,7 @@ Try it live: **[sqlmath.github.io/sqlmath](https://sqlmath.github.io/sqlmath/ind
210
221
 
211
222
 
212
223
  <br><br>
224
+
213
225
  ### Arrays
214
226
 
215
227
  | Function | Description |
@@ -221,12 +233,14 @@ Try it live: **[sqlmath.github.io/sqlmath](https://sqlmath.github.io/sqlmath/ind
221
233
 
222
234
 
223
235
  <br><br>
236
+
224
237
  ### Date/Time
225
238
 
226
239
  sqlmath extends SQLite's date functions with integer-format conversions (YYYYMMDDHHMMSS).
227
240
 
228
241
 
229
242
  <br><br>
243
+
230
244
  ### Time Series / Signal Processing
231
245
 
232
246
  | Function | Description |
@@ -236,6 +250,7 @@ sqlmath extends SQLite's date functions with integer-format conversions (YYYYMMD
236
250
 
237
251
 
238
252
  <br><br>
253
+
239
254
  ### Compression
240
255
 
241
256
  | Function | Description |
@@ -247,6 +262,7 @@ sqlmath extends SQLite's date functions with integer-format conversions (YYYYMMD
247
262
 
248
263
 
249
264
  <br><br>
265
+
250
266
  ### Type Casting
251
267
 
252
268
  | Function | Description |
@@ -258,6 +274,7 @@ sqlmath extends SQLite's date functions with integer-format conversions (YYYYMMD
258
274
 
259
275
 
260
276
  <br><br>
277
+
261
278
  ### Cryptography
262
279
 
263
280
  | Function | Description |
@@ -271,6 +288,7 @@ SELECT HEX(sha256('hello')) AS hash;
271
288
 
272
289
 
273
290
  <br><br>
291
+
274
292
  # Machine Learning with LightGBM
275
293
 
276
294
  sqlmath embeds [LightGBM](https://lightgbm.readthedocs.io/) for gradient boosting directly in SQL queries. Train models on your data without leaving SQL — no data shuffle to Python needed.
@@ -279,6 +297,7 @@ sqlmath embeds [LightGBM](https://lightgbm.readthedocs.io/) for gradient boostin
279
297
 
280
298
 
281
299
  <br><br>
300
+
282
301
  ### Training from a Table
283
302
 
284
303
  `LGBM_TRAINFROMTABLE` is an **aggregate function** — it consumes rows like `SUM()` or `AVG()`, but outputs a trained model BLOB.
@@ -311,6 +330,7 @@ FROM training_data;
311
330
 
312
331
 
313
332
  <br><br>
333
+
314
334
  ### Prediction
315
335
 
316
336
  ```sql
@@ -330,6 +350,7 @@ FROM test_data;
330
350
 
331
351
 
332
352
  <br><br>
353
+
333
354
  ### Real-World Example: Credit Card Fraud Detection
334
355
 
335
356
  From the [Kaggle notebook](https://www.kaggle.com/code/kaizhu256/sql-is-all-you-need) — training on 284,807 transactions with 0.17% fraud rate:
@@ -378,6 +399,7 @@ db_exec(db=db, sql="""
378
399
 
379
400
 
380
401
  <br><br>
402
+
381
403
  ### LightGBM Functions
382
404
 
383
405
  | Function | Type | Description |
@@ -398,14 +420,16 @@ Full notebook with fraud detection, intraday trading signals, and model persiste
398
420
  **Kaggle Environment:**
399
421
  - Linux x64, Python 3.12, Node.js 24
400
422
  - Datasets: [Credit Card Fraud](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud) (284K transactions), SPY intraday OHLCV
401
- - sqlmath installs via `pip install sqlmath==2026.7.30`
423
+ - sqlmath installs via `pip install sqlmath==2026.9.29`
402
424
 
403
425
 
404
426
  <br><br>
427
+
405
428
  # Use Cases
406
429
 
407
430
 
408
431
  <br><br>
432
+
409
433
  ### Financial Data Analysis
410
434
 
411
435
  ```python
@@ -434,6 +458,7 @@ db_close(db)
434
458
 
435
459
 
436
460
  <br><br>
461
+
437
462
  ### Embedded ML Pipelines
438
463
 
439
464
  Train and deploy models without data movement:
@@ -460,6 +485,7 @@ db_file_save(db=db, filename="scored_data.sqlite")
460
485
 
461
486
 
462
487
  <br><br>
488
+
463
489
  ### Data Compression & Hashing
464
490
 
465
491
  ```sql
@@ -476,6 +502,7 @@ HAVING COUNT(*) > 1;
476
502
 
477
503
 
478
504
  <br><br>
505
+
479
506
  # Why sqlmath vs Alternatives?
480
507
 
481
508
  | Feature | sqlmath | pandas | DuckDB | sqlite3 |
@@ -483,14 +510,14 @@ HAVING COUNT(*) > 1;
483
510
  | In-database ML | ✅ LightGBM | ❌ | ❌ | ❌ |
484
511
  | Zero data shuffle | ✅ | ❌ | ✅ | ✅ |
485
512
  | Statistical functions | ✅ 20+ | ✅ | ✅ | ❌ |
486
- | Browser support | ✅ WASM | ❌ | ❌ | ❌ |
513
+ | Browser support | ✅ WASM + LightGBM | ❌ | ✅ DuckDB-Wasm | ✅ official WASM |
487
514
  | Single file deployment | ✅ | ❌ | ✅ | ✅ |
488
515
  | Memory efficiency | ✅ Streaming | ❌ In-memory | ✅ | ✅ |
489
516
 
490
517
  **Choose sqlmath when:**
491
518
  - You need ML training/inference inside the database
492
519
  - Your data is already in SQLite
493
- - You want browser-based analytics (WebAssembly)
520
+ - You want ML training/inference in the browser (WebAssembly)
494
521
  - You need statistical functions beyond basic SQL
495
522
 
496
523
  **Choose pandas when:**
@@ -505,6 +532,7 @@ HAVING COUNT(*) > 1;
505
532
 
506
533
 
507
534
  <br><br>
535
+
508
536
  # Python API Reference
509
537
 
510
538
  ```python
@@ -522,6 +550,7 @@ from sqlmath import (
522
550
 
523
551
 
524
552
  <br><br>
553
+
525
554
  ### db_exec()
526
555
 
527
556
  ```python
@@ -537,6 +566,7 @@ result = db_exec(
537
566
 
538
567
 
539
568
  <br><br>
569
+
540
570
  # Node.js API Reference
541
571
  - https://sqlmath.github.io/sqlmath/apidoc.html
542
572
 
@@ -544,6 +574,7 @@ result = db_exec(
544
574
 
545
575
 
546
576
  <br><br>
577
+
547
578
  # Platform Notes
548
579
 
549
580
  The JavaScript (Node.js) binding is more mature than Python. Key differences:
@@ -559,10 +590,12 @@ The JavaScript (Node.js) binding is more mature than Python. Key differences:
559
590
 
560
591
 
561
592
  <br><br>
593
+
562
594
  # Building from Source
563
595
 
564
596
 
565
597
  <br><br>
598
+
566
599
  ### Prerequisites
567
600
 
568
601
  - Node.js 24+
@@ -571,6 +604,7 @@ The JavaScript (Node.js) binding is more mature than Python. Key differences:
571
604
 
572
605
 
573
606
  <br><br>
607
+
574
608
  ### Build
575
609
 
576
610
  ```shell
@@ -589,6 +623,7 @@ sh jslint_ci.sh shCiBuildWasm
589
623
 
590
624
 
591
625
  <br><br>
626
+
592
627
  ### Run Tests
593
628
 
594
629
  ```shell
@@ -604,6 +639,7 @@ npm run test --fast
604
639
 
605
640
 
606
641
  <br><br>
642
+
607
643
  ### Serve Demo Locally
608
644
 
609
645
  ```shell
@@ -613,11 +649,13 @@ PORT=8080 sh jslint_ci.sh shHttpFileServer
613
649
 
614
650
 
615
651
  <br><br>
652
+
616
653
  # Package Listing
617
654
  ![screenshot_package_listing.svg](https://sqlmath.github.io/sqlmath/branch-beta/.artifact/screenshot_package_listing.svg)
618
655
 
619
656
 
620
657
  <br><br>
658
+
621
659
  # Changelog
622
660
  - [Full CHANGELOG.md](CHANGELOG.md)
623
661
 
@@ -625,6 +663,7 @@ PORT=8080 sh jslint_ci.sh shHttpFileServer
625
663
 
626
664
 
627
665
  <br><br>
666
+
628
667
  # License
629
668
  - [sqlite](https://github.com/sqlite/sqlite) is under [public domain](https://www.sqlite.org/copyright.html).
630
669
  - [jslint](https://github.com/jslint-org/jslint) is under [Unlicense License](https://github.com/jslint-org/jslint/blob/master/LICENSE).
@@ -635,34 +674,37 @@ PORT=8080 sh jslint_ci.sh shHttpFileServer
635
674
 
636
675
 
637
676
  <br><br>
677
+
638
678
  # Devops Instruction
639
679
 
640
680
 
641
681
  <br><br>
682
+
642
683
  ### python pypi publish
643
684
  ```shell
644
685
  python -m build
645
686
  #
646
- twine upload --repository testpypi dist/sqlmath-2026.7.30*
647
- py -m pip install --index-url https://test.pypi.org/simple/ sqlmath==2026.7.30
687
+ twine upload --repository testpypi dist/sqlmath-2026.9.29*
688
+ py -m pip install --index-url https://test.pypi.org/simple/ sqlmath==2026.9.29
648
689
  #
649
- twine upload dist/sqlmath-2026.7.30*
650
- pip install sqlmath==2026.7.30
690
+ twine upload dist/sqlmath-2026.9.29*
691
+ pip install sqlmath==2026.9.29
651
692
  ```
652
693
 
653
694
 
654
695
  <br><br>
696
+
655
697
  ### sqlite upgrade
656
698
  - goto https://www.sqlite.org/changes.html
657
699
  ```shell
658
700
  (set -e
659
701
  #
660
702
  # lgbm
661
- sh jslint_ci.sh shRollupUpgrade "v4.5.0" "v4.6.0" ".ci.sh sqlmath_base.h"
703
+ sh jslint_ci.sh shRollupUpgrade "v4.6.0" "v4.7.0" ".ci.sh sqlmath_base.h"
662
704
  #
663
705
  # sqlite
664
- sh jslint_ci.sh shRollupUpgrade "3.50.3" "3.50.4" ".ci.sh sqlmath_external_sqlite.c"
665
- sh jslint_ci.sh shRollupUpgrade "3500300" "3500400" ".ci.sh sqlmath_external_sqlite.c"
706
+ sh jslint_ci.sh shRollupUpgrade "3.50.4" "3.51.3" ".ci.sh sqlmath_external_sqlite.c"
707
+ sh jslint_ci.sh shRollupUpgrade "3500400" "3510300" ".ci.sh sqlmath_external_sqlite.c"
666
708
  #
667
709
  # shSqlmathUpdate
668
710
  read -p "Press Enter to shSqlmathUpdate:"
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file