@noeva/analytics-core 0.3.1 → 0.3.3
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 +18 -0
- package/core.js +3 -1
- package/modello/contenitore/Dockerfile +8 -1
- package/modello/contenitore/correggi-oracle.py +39 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
3
3
|
Le versioni del pacchetto che i repository dei progetti installano (ADR 0005). Prima di
|
|
4
4
|
`analytics upgrade` si legge cosa cambia fra la versione installata e la nuova.
|
|
5
5
|
|
|
6
|
+
## 0.3.3 — 6 novembre 2026
|
|
7
|
+
|
|
8
|
+
- Il contenitore parla Oracle: l'extra `oracle` di wrenai (oracledb in modalita' thin,
|
|
9
|
+
Oracle 12.1 e successivi). Per una sorgente 11.2 serve la modalita' thick, con
|
|
10
|
+
l'Instant Client, che il contenitore non ha.
|
|
11
|
+
- `correggi-oracle.py` corregge in build il connettore Oracle di wrenai 0.15.0, che
|
|
12
|
+
leggeva i `NUMBER` senza precisione (colonne non vincolate, `SUM`, divisioni) come
|
|
13
|
+
interi e troncava i decimali senza errori. Si ferma se una versione nuova di wrenai
|
|
14
|
+
cambia il connettore. Un `FLOAT` (anche `CAST(... AS DOUBLE)`, che il motore traduce in
|
|
15
|
+
`DOUBLE PRECISION`) faceva fallire la query: ora e' virgola mobile.
|
|
16
|
+
- Si ricostruisce il contenitore: `docker compose --env-file .env.local up -d --build`.
|
|
17
|
+
|
|
18
|
+
## 0.3.2 — 6 novembre 2026
|
|
19
|
+
|
|
20
|
+
- Su Windows la CLI non partiva: la cartella del pacchetto si ricavava con
|
|
21
|
+
`URL.pathname` (`/D:/...`, quindi `D:\D:\...`). Ora con `fileURLToPath`, che
|
|
22
|
+
decodifica anche gli spazi. `rilascio-windows.yml` si fermava al primo passo.
|
|
23
|
+
|
|
6
24
|
## 0.3.1 — 6 novembre 2026
|
|
7
25
|
|
|
8
26
|
- `analytics pubblica` non segue piu' i redirect: un contenitore senza la rotta
|
package/core.js
CHANGED
|
@@ -12,8 +12,10 @@ import {
|
|
|
12
12
|
cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync,
|
|
13
13
|
} from 'node:fs';
|
|
14
14
|
import { dirname, join, relative, sep } from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
// fileURLToPath e non .pathname: su Windows .pathname e' /D:/... e il percorso diventa D:\D:\...
|
|
18
|
+
export const PACCHETTO = fileURLToPath(new URL('.', import.meta.url));
|
|
17
19
|
export const VERSIONE = JSON.parse(readFileSync(join(PACCHETTO, 'package.json'), 'utf8')).version;
|
|
18
20
|
const MODELLO = join(PACCHETTO, 'modello', 'repository');
|
|
19
21
|
const KIT = join(PACCHETTO, 'kit');
|
|
@@ -44,11 +44,18 @@ USER wren
|
|
|
44
44
|
WORKDIR /home/wren
|
|
45
45
|
|
|
46
46
|
# mcp<2: wrenai importa mcp.server.fastmcp, tolto nell'SDK 2.x.
|
|
47
|
+
# `oracle` porta oracledb in modalita' thin (Oracle 12.1 e successivi, niente
|
|
48
|
+
# Instant Client).
|
|
47
49
|
ARG WRENAI_VERSION=0.15.0
|
|
48
50
|
RUN pip install --user \
|
|
49
|
-
"wrenai[mssql,clickhouse,postgres,memory-onnx,mcp,main]==${WRENAI_VERSION}" \
|
|
51
|
+
"wrenai[mssql,clickhouse,postgres,oracle,memory-onnx,mcp,main]==${WRENAI_VERSION}" \
|
|
50
52
|
"mcp[cli]>=1.19,<2"
|
|
51
53
|
|
|
54
|
+
# Il connettore Oracle di wrenai 0.15.0 tronca i decimali dei NUMBER senza
|
|
55
|
+
# precisione: vedi correggi-oracle.py.
|
|
56
|
+
COPY correggi-oracle.py /tmp/correggi-oracle.py
|
|
57
|
+
RUN python /tmp/correggi-oracle.py
|
|
58
|
+
|
|
52
59
|
RUN python -c "import pyodbc; \
|
|
53
60
|
drivers = pyodbc.drivers(); \
|
|
54
61
|
assert any('SQL Server' in d for d in drivers), f'driver ODBC assente: {drivers}'; \
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""Corregge il connettore Oracle di wrenai 0.15.0, che tronca i decimali.
|
|
2
|
+
|
|
3
|
+
`wren/connector/oracle.py` traduce un NUMBER senza precisione in int64: e' il tipo
|
|
4
|
+
delle colonne non vincolate (molte, nei data mart Oracle) e di ogni espressione
|
|
5
|
+
calcolata da Oracle (SUM, divisioni, ROUND). Il risultato e' 400,68 € letto come
|
|
6
|
+
400, senza errori. Qui, quando i metadati non dicono la precisione, decidono i
|
|
7
|
+
valori: tutti interi -> int64, altrimenti float64. Un FLOAT(p) (scala -127: e'
|
|
8
|
+
anche il CAST(... AS DOUBLE) che il motore traduce in DOUBLE PRECISION) diventava
|
|
9
|
+
decimal(38,0) e la query falliva: diventa float64.
|
|
10
|
+
|
|
11
|
+
Si applica in build (Dockerfile) e si ferma se il connettore e' cambiato: a una
|
|
12
|
+
versione nuova di wrenai si controlla se la correzione serve ancora.
|
|
13
|
+
"""
|
|
14
|
+
import pathlib
|
|
15
|
+
import sys
|
|
16
|
+
|
|
17
|
+
import wren.connector.oracle as connettore
|
|
18
|
+
|
|
19
|
+
file = pathlib.Path(connettore.__file__)
|
|
20
|
+
sorgente = file.read_text()
|
|
21
|
+
prima = """ if db_type == oracledb.DB_TYPE_NUMBER:
|
|
22
|
+
arrow_type = _ora_number_type(precision, scale)"""
|
|
23
|
+
dopo = """ if db_type == oracledb.DB_TYPE_NUMBER and not precision and scale in (None, -127):
|
|
24
|
+
# NUMBER senza precisione: decidono i valori (correggi-oracle.py).
|
|
25
|
+
vals = [v for v in col_values[i] if v is not None]
|
|
26
|
+
arrow_type = pa.int64() if all(isinstance(v, int) for v in vals) else pa.float64()
|
|
27
|
+
elif db_type == oracledb.DB_TYPE_NUMBER and scale == -127:
|
|
28
|
+
# FLOAT(p), anche CAST(... AS DOUBLE PRECISION): virgola mobile.
|
|
29
|
+
arrow_type = pa.float64()
|
|
30
|
+
elif db_type == oracledb.DB_TYPE_NUMBER:
|
|
31
|
+
arrow_type = _ora_number_type(precision, scale)"""
|
|
32
|
+
|
|
33
|
+
if dopo in sorgente:
|
|
34
|
+
print("connettore Oracle: gia' corretto")
|
|
35
|
+
sys.exit(0)
|
|
36
|
+
if sorgente.count(prima) != 1:
|
|
37
|
+
sys.exit("connettore Oracle cambiato: rivedere correggi-oracle.py")
|
|
38
|
+
file.write_text(sorgente.replace(prima, dopo))
|
|
39
|
+
print("connettore Oracle: corretto", file)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noeva/analytics-core",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "Gli strumenti di un progetto NOEVA Analytics nel suo repository: moduli di pagina, snapshot, verifica dello standard e kit dell'agente (ADR 0005).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|