feat: dialectes Firebird/ClickHouse/Redis/Cassandra + HSQLDB (pont JDBC) — v2.10.1#5
Merged
Conversation
…amia) Dialecte `firebird` (AbstractSqlDialect + quirks) pour Firebird 3.0+. Driver pur-JS node-firebird (peer optionnel). Connexion serveur ; id UUID pré-généré. Quirks gérés : - pagination ROWS m TO n (pas de LIMIT/OFFSET) ; - boolean → SMALLINT 0/1 (node-firebird binde les booléens en '1'/'0' → BOOLEAN natif lève -303) ; - text/json/array → VARCHAR(4000) (node-firebird hange à la lecture des BLOB sur wire chiffré) ; - DROP TABLE multi-passes (ni IF EXISTS ni CASCADE) ; - introspection RDB$RELATIONS/RDB$RELATION_FIELDS ; - auth Srp + wireCrypt forcés (négociation auto du driver plante) ; - insensible-casse via UPPER(col) LIKE UPPER(?). Câblage : DialectType, DIALECT_LOADERS, DIALECT_CONFIGS, peerDependencies (optionnel). Release 2.7.0 : CHANGELOG, llms.txt, README (16 bases). Validé LIVE sur firebird3.0-server natif (sans Docker) : test-sgbd 20/20. Limites : texte/JSON ≤ 4000 car. ; affected-rows approximatif (non exposé par le driver). Author: Dr Hamid MADANI <drmdh@msn.com>
…r amia)
Dialecte `clickhouse` (AbstractSqlDialect + quirks) pour ClickHouse (MergeTree, HTTP).
Driver officiel @clickhouse/client (peer optionnel). Scope append/analytique.
Quirks gérés :
- generateCreateTable → ENGINE = MergeTree() ORDER BY id ;
- paramètres typés {pN:Type} (conversion des `?` positionnels) ;
- colonnes Nullable(T) (sauf id) ;
- UPDATE/DELETE → mutations ALTER TABLE … UPDATE/DELETE rendues SYNCHRONES via
mutations_sync=2 (read-after-write fiable) ;
- dates 'YYYY-MM-DD HH:MM:SS' (sentinel 'now' géré) ;
- ILIKE pour l'insensible-casse ; pas de CREATE INDEX.
Câblage : DialectType, DIALECT_LOADERS, DIALECT_CONFIGS, peerDependencies (optionnel).
Release 2.8.0 : CHANGELOG, llms.txt, README (17 bases).
Validé LIVE sur clickhouse-server natif (sans Docker, amia) : test-sgbd 20/20.
Limites : unicité non garantie ; mutations coûteuses (réserver à l'analytique).
Author: Dr Hamid MADANI <drmdh@msn.com>
…lidé live amia) Dialecte `redis` (IDialect dédié, façon Mongo) sur Redis Stack. Driver ioredis. Pas un cache KV : stockage documentaire + recherche serveur. - Stockage RedisJSON : JSON.SET/GET, JSON.NUMINCRBY (increment atomique). - Requêtes RediSearch : un index FT.CREATE par entité à l'initSchema ; FT.SEARCH avec traduction des filtres @mostajs ($eq/$ne/$gt/$gte/$lt/$lte/$in/$nin/$regex) → TAG/ NUMERIC/TEXT ; SORTBY/LIMIT ; count via LIMIT 0 0 ; soft-delete via champ _deleted ; échappement des valeurs TAG (UUID). - CRUD complet, relations M2O par lookup (JSON.GET), upsert, addToSet/pull. Câblage : DialectType, DIALECT_LOADERS, DIALECT_CONFIGS, peerDependencies (optionnel). Release 2.9.0 : CHANGELOG, llms.txt, README (18 bases) + note positionnement Redis. Validé LIVE sur redis-stack-server natif (modules search + ReJSON, sans Docker, amia) : test-sgbd 20/20. Author: Dr Hamid MADANI <drmdh@msn.com>
…dé live amia 20/20) Dialecte `cassandra` (AbstractSqlDialect + quirks CQL) pour Apache Cassandra. Driver officiel cassandra-driver. VALIDÉ LIVE sur amia : test-sgbd 20/20. Quirks CQL gérés : - CREATE TABLE (id PRIMARY KEY) sans NOT NULL/UNIQUE/FK/DEFAULT ; - ALLOW FILTERING auto sur les SELECT filtrés sur colonne non-clé ; - WHERE 1=1 retiré (tautologie des filtres vides, refusée par CQL) ; - LIMIT sans OFFSET ; pas d'ORDER BY arbitraire ; INSERT = upsert natif ; - placeholders ? (prepared) ; system_schema.tables/columns ; Long → number. Câblage : DialectType, DIALECT_LOADERS, DIALECT_CONFIGS, peerDependencies (optionnel). Release 2.10.0 : CHANGELOG, llms.txt, README (19 bases + section « Live validation » avec matrice 20/20 par dialecte). NB infra : Cassandra 4.1 exige Java 11 (option JVM CMS retirée en Java 14+ → ne démarre pas sous Java 17) ; libérer le port 9042 des zombies (fuser -k). Author: Dr Hamid MADANI <drmdh@msn.com>
…ont JDBC) — 2.10.1 - count() : lit `cnt` puis `CNT`, et à défaut la première (et seule) valeur de la ligne. HSQLDB/Oracle plient l'alias non-quoté en MAJUSCULES, et le pont JDBC renvoie la clé brute sans la normaliser comme les drivers natifs. Non-régression vérifiée 20/20 sur les 14 dialectes SQL héritant d'AbstractSqlDialect : 5 locaux (sqlite, duckdb, sqljs, pglite, hsqldb) + 9 amia (postgres, cockroachdb, firebird, clickhouse, mssql, oracle, cassandra, mariadb, mysql). - HSQLDB : 1er dialecte « pont JDBC » validé LIVE 20/20 (serveur HyperSQL 2.7 Java local, sans Docker ; le jar fait serveur ET driver JDBC, chargé depuis jar_files/ par le pont). - SQL Server : connexion par URL `mssql://…` parsée en objet de config (node-mssql l'exige) + `string`→`NVARCHAR(255)` (UNIQUE interdit sur NVARCHAR(MAX)). Validé LIVE 20/20 sur mssql-server 2022 natif (apt, sans Docker). Author: Dr Hamid MADANI <drmdh@msn.com>
Premier filet de non-régression rejouable en CI, SANS infrastructure : tout tourne en mémoire sur les dialectes in-process (sqlite, sql.js, pglite, duckdb). - vitest 4 + config (tests/**/*.test.ts, pool forks, timeouts). - Helpers : createIsolatedDialect (hors singleton/env global) + BaseRepository, paramétrés sur les 4 dialectes in-process. - tests/crud.test.ts : scénario complet ×4 dialectes (60 tests) — schéma, create, relations many-to-one, findById/findOne/findAll, count + count(filter) [couvre la régression de casse d'alias cnt/CNT], update, upsert (idempotent), pagination, delete/deleteMany. - tests/transactions.test.ts : commit (persiste) & rollback (annule) via $transaction(cb) ×4 dialectes (8 tests). - Scripts npm : test (vitest run), test:watch, typecheck (tsc --noEmit). - CI GitHub Actions (.github/workflows/test.yml) : Node 20/22, typecheck + build + test (npm install — package-lock.json non versionné). Total : 68 tests, ~6 s, zéro dépendance serveur. Author: Dr Hamid MADANI <drmdh@msn.com>
test: suite de tests automatisés in-process + CI (vitest)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Auteur : Dr Hamid MADANI drmdh@msn.com
Résumé
Campagne d'ajout de dialectes + 1re validation d'un dialecte « pont JDBC ». Porte
@mostajs/ormà 17 dialectes annoncés, dont 14 dialectes SQL re-validés 20/20 en live (sans Docker).Contenu (5 commits)
1cda224node-firebird(Srp+wireCrypt),boolean→SMALLINT,text/json→VARCHAR(4000), paginationROWS m TO n, roleRDB$ADMIN. Validé live 20/20.172d05a@clickhouse/client,MergeTree, params typés{pN:Type}, UPDATE/DELETE → mutationsmutations_sync=2. Validé live 20/20.e96ac69ioredis, stockage RedisJSON + requêtes RediSearch (FT.CREATE/FT.SEARCH). Validé live 20/20.e968a48cassandra-driver,ALLOW FILTERINGauto, upsert natif,WHERE 1=1retiré. Validé live 20/20.d480ac6count()(casse aliascnt/CNT) + HSQLDB validé via pont JDBC + SQL Server (connexion URL +NVARCHAR(255)).Fix notable —
count()insensible à la casse de l'aliasSELECT COUNT(*) as cnt: HSQLDB/Oracle plient l'alias non-quoté en MAJUSCULES, et le pont JDBC renvoie la clé brute. Lecture désormaiscnt ?? CNT ?? première valeur. Non-régression vérifiée 20/20 sur les 14 dialectes SQL (5 in-process + 9 serveurs natifs).Validation live (20/20 chacun)
PostgreSQL · SQL Server 2022 · MySQL · MariaDB · Oracle XE · CockroachDB · MongoDB · Firebird · ClickHouse · Redis · Cassandra · Firestore (émulateur) · HSQLDB (pont JDBC) · DuckDB · SQLite · sql.js · pglite
Publié sur npm :
@mostajs/orm@2.10.1.