fg-tracker-sdk 0.13.0 → 0.14.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/CHANGELOG.md +22 -0
- package/README.md +12 -2
- package/dist/context.d.ts +23 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +29 -5
- package/dist/context.js.map +1 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +3 -1
- package/dist/database.js.map +1 -1
- package/dist/express.js +1 -1
- package/dist/express.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/aws.d.ts +7 -4
- package/dist/infra/aws.d.ts.map +1 -1
- package/dist/infra/aws.js +12 -7
- package/dist/infra/aws.js.map +1 -1
- package/dist/infra/lambda.js +1 -1
- package/dist/infra/lambda.js.map +1 -1
- package/dist/infra/messaging.d.ts +10 -2
- package/dist/infra/messaging.d.ts.map +1 -1
- package/dist/infra/messaging.js +22 -3
- package/dist/infra/messaging.js.map +1 -1
- package/dist/next.js +1 -1
- package/dist/next.js.map +1 -1
- package/dist/normalize.d.ts +58 -8
- package/dist/normalize.d.ts.map +1 -1
- package/dist/normalize.js +383 -79
- package/dist/normalize.js.map +1 -1
- package/dist/pg.d.ts +12 -2
- package/dist/pg.d.ts.map +1 -1
- package/dist/pg.js +464 -213
- package/dist/pg.js.map +1 -1
- package/dist/tracker.d.ts +27 -5
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +41 -6
- package/dist/tracker.js.map +1 -1
- package/dist/types.d.ts +18 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -1
package/dist/normalize.js
CHANGED
|
@@ -46,43 +46,233 @@ export function httpClientSemconv(url) {
|
|
|
46
46
|
const port = url.port ? Number(url.port) : url.protocol === 'https:' ? 443 : url.protocol === 'http:' ? 80 : undefined;
|
|
47
47
|
return { 'url.full': redactedUrl(url), 'server.address': url.hostname, ...(port ? { 'server.port': port } : {}) };
|
|
48
48
|
}
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
/** `postgresql`/`postgres`/`pg`, `mysql`/`mariadb`, `sqlite`/`sqlite3`; o resto é `other`. Sem sistema, PostgreSQL. */
|
|
50
|
+
export function sqlDialect(system) {
|
|
51
|
+
if (system === undefined || system === null)
|
|
52
|
+
return 'postgresql';
|
|
53
|
+
const name = String(system).trim().toLowerCase();
|
|
54
|
+
if (name === 'postgresql' || name === 'postgres' || name === 'pg')
|
|
55
|
+
return 'postgresql';
|
|
56
|
+
if (name === 'mysql' || name === 'mariadb')
|
|
57
|
+
return 'mysql';
|
|
58
|
+
if (name === 'sqlite' || name === 'sqlite3')
|
|
59
|
+
return 'sqlite';
|
|
60
|
+
return 'other';
|
|
61
|
+
}
|
|
54
62
|
/**
|
|
55
63
|
* Abertura de dollar-quoting: `$$` ou `$tag$`, com a tag nas regras de identificador do Postgres
|
|
56
64
|
* (letra, `_` ou qualquer caractere não ASCII no início; depois também dígitos; nunca `$`). Tags
|
|
57
65
|
* com acento (`$é$`) são válidas e precisam ser reconhecidas, senão o conteúdo sai como texto.
|
|
58
66
|
* Sticky (`y`): testada na posição do `$`, sem copiar o resto do texto.
|
|
59
67
|
*/
|
|
60
|
-
const DOLLAR_TAG = /\$(?:[A-Za-z_\u0080
|
|
68
|
+
const DOLLAR_TAG = /\$(?:[A-Za-z_\u0080-][A-Za-z_0-9\u0080-]*)?\$/y;
|
|
61
69
|
/**
|
|
62
70
|
* Identificador (e palavra-chave) inteiro, com os `$` internos (`a$b$c`), e parâmetro (`$1`), como
|
|
63
71
|
* no analisador do Postgres: o `$` só abre dollar-quoting no início de um token. Depois de um
|
|
64
|
-
* parâmetro ele abre (`$1$t$…$t$`), e o conteúdo é ocultado.
|
|
72
|
+
* parâmetro ele abre (`$1$t$…$t$`), e o conteúdo é ocultado. No MySQL o `$` também pode começar um
|
|
73
|
+
* identificador.
|
|
65
74
|
*/
|
|
66
|
-
const IDENTIFIER = /[A-Za-z_\u0080
|
|
75
|
+
const IDENTIFIER = /[A-Za-z_\u0080-][A-Za-z0-9_$\u0080-]*/y;
|
|
76
|
+
const MYSQL_IDENTIFIER = /[A-Za-z_$\u0080-][A-Za-z0-9_$\u0080-]*/y;
|
|
67
77
|
const PARAM = /\$[0-9]+/y;
|
|
78
|
+
/** `?`, `?1` (SQLite, MySQL e outros): o número faz parte do marcador. */
|
|
79
|
+
const QUESTION_PARAM = /\?[0-9]+/y;
|
|
80
|
+
/**
|
|
81
|
+
* Antes de um destes, `"…"` do MySQL/SQLite só pode ser identificador (nunca valor). `FROM` não
|
|
82
|
+
* entra: também faz parte de expressões (`IS NOT DISTINCT FROM "x"`, `TRIM(BOTH "x" FROM "y")`,
|
|
83
|
+
* `EXTRACT(YEAR FROM "…")`), onde `"…"` pode ser texto.
|
|
84
|
+
*/
|
|
85
|
+
const IDENTIFIER_ONLY_AFTER = new Set(['join', 'into', 'update', 'table', 'exists', 'index', 'view', 'as']);
|
|
68
86
|
function sticky(pattern, text, at) {
|
|
69
87
|
pattern.lastIndex = at;
|
|
70
88
|
return pattern.exec(text)?.[0];
|
|
71
89
|
}
|
|
90
|
+
function isDigit(code) {
|
|
91
|
+
return code >= 48 && code <= 57;
|
|
92
|
+
}
|
|
93
|
+
/** Letra, dígito, `_` ou não ASCII: continua um número colado (`0x1F`, `1_000`, `1e5`, `2d`). */
|
|
94
|
+
function isWordCode(code) {
|
|
95
|
+
return (code >= 48 && code <= 57) || (code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code === 95 || code >= 0x80;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Fim de um literal numérico a partir de `start` (um dígito, ou `.` seguido de dígito): decimal,
|
|
99
|
+
* `0x`/`0o`/`0b`, separador `_`, expoente com sinal (`4.1e-15`) e sufixos colados (`1.5f`, junk
|
|
100
|
+
* como `123abc`). Tudo vira um `?`; dígitos dentro de identificadores (`t1`, `col_2`) nunca chegam
|
|
101
|
+
* aqui, porque o identificador é consumido inteiro.
|
|
102
|
+
*/
|
|
103
|
+
function numberEnd(sql, start) {
|
|
104
|
+
const prefixed = sql.charCodeAt(start) === 48 && /[xXoObB]/.test(sql[start + 1] ?? '');
|
|
105
|
+
let i = start;
|
|
106
|
+
while (i < sql.length) {
|
|
107
|
+
const code = sql.charCodeAt(i);
|
|
108
|
+
if (isWordCode(code) || code === 46) {
|
|
109
|
+
i++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
// Sinal do expoente (`1e-5`, `2.5E+3`), só em número decimal e seguido de dígito.
|
|
113
|
+
if ((code === 43 || code === 45) && !prefixed && (sql[i - 1] === 'e' || sql[i - 1] === 'E') && isDigit(sql.charCodeAt(i + 1))) {
|
|
114
|
+
i++;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
return i;
|
|
120
|
+
}
|
|
121
|
+
/** Fim do comentário de linha que começa em `start`: o primeiro caractere de `ends`, ou o fim do texto. */
|
|
122
|
+
function lineCommentEnd(sql, start, ends) {
|
|
123
|
+
for (let i = start; i < sql.length; i++)
|
|
124
|
+
if (ends.includes(sql[i]))
|
|
125
|
+
return i;
|
|
126
|
+
return sql.length;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Espaço para os lexers SQL: só ASCII (espaço, `\t`, `\n`, `\v`, `\f`, `\r`). MySQL, SQLite e
|
|
130
|
+
* PostgreSQL leem espaços Unicode (U+00A0, U+2003…) como parte de identificador, não como espaço.
|
|
131
|
+
*/
|
|
132
|
+
function isSqlSpace(code) {
|
|
133
|
+
return code === 32 || (code >= 9 && code <= 13);
|
|
134
|
+
}
|
|
135
|
+
/** Posição do próximo caractere que não é espaço a partir de `start`. */
|
|
136
|
+
function nextNonSpace(sql, start) {
|
|
137
|
+
let i = start;
|
|
138
|
+
while (i < sql.length && isSqlSpace(sql.charCodeAt(i)))
|
|
139
|
+
i++;
|
|
140
|
+
return i;
|
|
141
|
+
}
|
|
142
|
+
/** Caractere de identificador do SQLite (`IdChar`): letra, dígito, `_`, `$` e qualquer não ASCII. */
|
|
143
|
+
function isSqliteIdChar(code) {
|
|
144
|
+
return isWordCode(code) || code === 36;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Parâmetro do SQLite com nome (`$x`, `@x`, `:x`, `#x`, inclusive `$a::b`) e o sufixo do Tcl entre
|
|
148
|
+
* parênteses (`$x(qualquer texto)`), que vai até o `)` ou o primeiro espaço, como no `tokenize.c`:
|
|
149
|
+
* fim do parâmetro, `-1` quando o sufixo não fecha (o SQLite recusa o texto), ou `start` quando não é
|
|
150
|
+
* parâmetro.
|
|
151
|
+
*/
|
|
152
|
+
function sqliteVariableEnd(sql, start) {
|
|
153
|
+
let i = start + 1;
|
|
154
|
+
let named = 0;
|
|
155
|
+
while (i < sql.length) {
|
|
156
|
+
const code = sql.charCodeAt(i);
|
|
157
|
+
if (isSqliteIdChar(code)) {
|
|
158
|
+
named++;
|
|
159
|
+
i++;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if (code === 40 && named > 0) {
|
|
163
|
+
i++;
|
|
164
|
+
while (i < sql.length && !isSqlSpace(sql.charCodeAt(i)) && sql[i] !== ')')
|
|
165
|
+
i++;
|
|
166
|
+
return sql[i] === ')' ? i + 1 : -1;
|
|
167
|
+
}
|
|
168
|
+
if (code === 58 && sql.charCodeAt(i + 1) === 58) {
|
|
169
|
+
i += 2;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
return named > 0 ? i : start;
|
|
175
|
+
}
|
|
176
|
+
/** MySQL: `--` só abre comentário seguido de espaço ou controle ASCII (byte a byte), ou no fim do texto. */
|
|
177
|
+
const MYSQL_DASH_COMMENT_NEXT = /[\x00-\x20\x7f]/;
|
|
72
178
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
179
|
+
* Lexer SQL linear por dialeto. Cada posição é lida uma vez (os `indexOf` saltam para o fim do
|
|
180
|
+
* trecho que acharam).
|
|
181
|
+
*
|
|
182
|
+
* - PostgreSQL: `'…'` (`E'…'` com escape; literal comum com barra é ambíguo, porque depende de
|
|
183
|
+
* `standard_conforming_strings`), dollar-quoting, `"identificador"` copiado (em `analysis`,
|
|
184
|
+
* mascarado como `""`), `--` até `\n` ou `\r`, `/* … *\/` aninhado.
|
|
185
|
+
* - MySQL: `'…'` e `"…"` são texto (com `ANSI_QUOTES`, `"…"` é identificador; nos dois casos sai
|
|
186
|
+
* como `'?'`, salvo onde só cabe identificador: depois de JOIN, INTO, UPDATE, TABLE, EXISTS,
|
|
187
|
+
* INDEX, VIEW, AS ou junto de `.`), barra é ambígua (`NO_BACKSLASH_ESCAPES`), crase
|
|
188
|
+
* é identificador, `#` e `-- ` (com espaço ou controle depois) até `\n`, `/* … *\/` sem
|
|
189
|
+
* aninhamento e `/*! … *\/` (código executado) corta o texto.
|
|
190
|
+
* - SQLite: `'…'` sem escape, `"…"` é identificador ou, com DQS, texto (sai como `'?'`, salvo onde
|
|
191
|
+
* só cabe identificador), crase e `[…]` são identificadores, `--` até `\n`, `/* … *\/` sem
|
|
192
|
+
* aninhamento.
|
|
193
|
+
* - `other` (Oracle, SQL Server e sistemas desconhecidos): corta no primeiro caractere que pode
|
|
194
|
+
* abrir literal, identificador delimitado ou comentário em algum dialeto: `'` (inclusive `q'`,
|
|
195
|
+
* `N'`, `x'`), `"`, crase, `[`, `#`, `\`, `--`, `/*` e `$` que não é parâmetro.
|
|
75
196
|
*/
|
|
76
|
-
function
|
|
197
|
+
function scanSql(sql, options) {
|
|
198
|
+
const { dialect } = options;
|
|
199
|
+
const send = options.mode === 'send';
|
|
200
|
+
const postgres = dialect === 'postgresql';
|
|
201
|
+
const mysql = dialect === 'mysql';
|
|
202
|
+
const sqlite = dialect === 'sqlite';
|
|
203
|
+
const other = dialect === 'other';
|
|
204
|
+
const identifierPattern = mysql ? MYSQL_IDENTIFIER : IDENTIFIER;
|
|
205
|
+
const lineEnds = postgres ? '\n\r' : '\n';
|
|
77
206
|
let result = '';
|
|
78
207
|
let i = 0;
|
|
79
208
|
/** Fim do último identificador e se ele era só `E`: `E'…'` colado é o literal com escape. */
|
|
80
209
|
let identifierEnd = -1;
|
|
81
210
|
let identifierIsE = false;
|
|
211
|
+
/** Último token significativo (espaço e comentário não contam): decide `"…"` e o `.` de número. */
|
|
212
|
+
let previous = 'other';
|
|
213
|
+
let previousWord = '';
|
|
214
|
+
const cut = () => { result += ' …'; };
|
|
82
215
|
while (i < sql.length) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (
|
|
216
|
+
const ch = sql[i];
|
|
217
|
+
const code = sql.charCodeAt(i);
|
|
218
|
+
if (isSqlSpace(code)) {
|
|
219
|
+
result += ch;
|
|
220
|
+
i++;
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (other) {
|
|
224
|
+
if (ch === "'" || ch === '"' || ch === '`' || ch === '[' || ch === '#' || ch === '\\' || sql.startsWith('--', i) || sql.startsWith('/*', i)) {
|
|
225
|
+
cut();
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
if (ch === '$' && !isDigit(sql.charCodeAt(i + 1))) {
|
|
229
|
+
cut();
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Comentários.
|
|
234
|
+
// No MySQL, `--` seguido de outro caractere (inclusive espaço Unicode, como U+2003) é subtração dupla.
|
|
235
|
+
if (sql.startsWith('--', i) && (!mysql || i + 2 >= sql.length || MYSQL_DASH_COMMENT_NEXT.test(sql[i + 2]))) {
|
|
236
|
+
i = lineCommentEnd(sql, i + 2, lineEnds);
|
|
237
|
+
result += ' ';
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (mysql && ch === '#') {
|
|
241
|
+
i = lineCommentEnd(sql, i + 1, '\n');
|
|
242
|
+
result += ' ';
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
if (sql.startsWith('/*', i)) {
|
|
246
|
+
// `/*! … *\/` do MySQL é código executado (pode ter literais): o resto não sai.
|
|
247
|
+
if (mysql && sql[i + 2] === '!' && send) {
|
|
248
|
+
cut();
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
if (postgres) {
|
|
252
|
+
let depth = 1;
|
|
253
|
+
i += 2;
|
|
254
|
+
while (i < sql.length && depth) {
|
|
255
|
+
if (sql.startsWith('/*', i)) {
|
|
256
|
+
depth++;
|
|
257
|
+
i += 2;
|
|
258
|
+
}
|
|
259
|
+
else if (sql.startsWith('*/', i)) {
|
|
260
|
+
depth--;
|
|
261
|
+
i += 2;
|
|
262
|
+
}
|
|
263
|
+
else
|
|
264
|
+
i++;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
const end = sql.indexOf('*/', i + 2);
|
|
269
|
+
i = end < 0 ? sql.length : end + 2;
|
|
270
|
+
}
|
|
271
|
+
result += ' ';
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
// Identificadores delimitados.
|
|
275
|
+
if (ch === '"' && postgres) {
|
|
86
276
|
let end = i + 1;
|
|
87
277
|
let closed = false;
|
|
88
278
|
while (end < sql.length) {
|
|
@@ -96,104 +286,143 @@ function redactSqlLiterals(sql, stopAtAmbiguous = true) {
|
|
|
96
286
|
}
|
|
97
287
|
}
|
|
98
288
|
// Sem fechamento, o resto pode conter literais que o servidor nunca leu como tais: corta.
|
|
99
|
-
if (!closed &&
|
|
100
|
-
|
|
289
|
+
if (!closed && send) {
|
|
290
|
+
cut();
|
|
101
291
|
break;
|
|
102
292
|
}
|
|
103
|
-
|
|
293
|
+
// Na análise local o conteúdo some: `"; BEGIN"` não pode virar outro comando.
|
|
294
|
+
result += send ? sql.slice(i, end) : '""';
|
|
104
295
|
i = end;
|
|
296
|
+
previous = 'word';
|
|
297
|
+
previousWord = '';
|
|
105
298
|
continue;
|
|
106
299
|
}
|
|
107
|
-
if (
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
i += 2;
|
|
116
|
-
while (i < sql.length && depth) {
|
|
117
|
-
if (sql.startsWith('/*', i)) {
|
|
118
|
-
depth++;
|
|
119
|
-
i += 2;
|
|
300
|
+
if ((ch === '`' && (mysql || sqlite)) || (ch === '[' && sqlite)) {
|
|
301
|
+
const close = ch === '[' ? ']' : '`';
|
|
302
|
+
let end = i + 1;
|
|
303
|
+
let closed = false;
|
|
304
|
+
while (end < sql.length) {
|
|
305
|
+
if (close === '`' && sql[end] === '`' && sql[end + 1] === '`') {
|
|
306
|
+
end += 2;
|
|
307
|
+
continue;
|
|
120
308
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
309
|
+
if (sql[end++] === close) {
|
|
310
|
+
closed = true;
|
|
311
|
+
break;
|
|
124
312
|
}
|
|
125
|
-
else
|
|
126
|
-
i++;
|
|
127
313
|
}
|
|
128
|
-
|
|
314
|
+
if (!closed) {
|
|
315
|
+
cut();
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
result += sql.slice(i, end);
|
|
319
|
+
i = end;
|
|
320
|
+
previous = 'word';
|
|
321
|
+
previousWord = '';
|
|
129
322
|
continue;
|
|
130
323
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
//
|
|
324
|
+
// Literais de texto.
|
|
325
|
+
if (ch === "'" || (ch === '"' && (mysql || sqlite))) {
|
|
326
|
+
const quote = ch;
|
|
327
|
+
// PostgreSQL: só `E'…'` escapa sempre; o literal comum escapa com standard_conforming_strings
|
|
328
|
+
// desligado (a análise lê as duas formas). MySQL: escapa salvo NO_BACKSLASH_ESCAPES. SQLite: nunca.
|
|
329
|
+
const escapeString = postgres && identifierIsE && identifierEnd === i;
|
|
330
|
+
const escapes = mysql || escapeString || (postgres && options.escapeReading === true);
|
|
135
331
|
// Lido da entrada, não do `result` acumulado: ler o fim de uma string concatenada a materializa
|
|
136
332
|
// inteira, e isso a cada literal tornava um INSERT em lote quadrático (40 mil linhas: 2 s).
|
|
137
|
-
|
|
138
|
-
i++;
|
|
333
|
+
let end = i + 1;
|
|
139
334
|
let backslash = false;
|
|
140
|
-
|
|
141
|
-
|
|
335
|
+
let closed = false;
|
|
336
|
+
while (end < sql.length) {
|
|
337
|
+
const c = sql[end];
|
|
338
|
+
if (c === '\\' && !sqlite) {
|
|
142
339
|
backslash = true;
|
|
143
|
-
if (
|
|
144
|
-
|
|
340
|
+
if (escapes) {
|
|
341
|
+
end += 2;
|
|
145
342
|
continue;
|
|
146
343
|
}
|
|
147
344
|
}
|
|
148
|
-
if (
|
|
149
|
-
|
|
345
|
+
if (c === quote && sql[end + 1] === quote) {
|
|
346
|
+
end += 2;
|
|
150
347
|
continue;
|
|
151
348
|
}
|
|
152
|
-
|
|
349
|
+
end++;
|
|
350
|
+
if (c === quote) {
|
|
351
|
+
closed = true;
|
|
153
352
|
break;
|
|
353
|
+
}
|
|
154
354
|
}
|
|
155
|
-
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
355
|
+
// `"…"` sem barra no MySQL/SQLite: onde só cabe identificador (depois de JOIN, INTO, UPDATE,
|
|
356
|
+
// AS…, ou junto de um `.`), é identificador e fica; no resto pode ser texto e sai como `'?'`.
|
|
357
|
+
const keepIdentifier = quote === '"' && closed && !backslash
|
|
358
|
+
&& (previous === 'dot' || (previous === 'word' && IDENTIFIER_ONLY_AFTER.has(previousWord)) || sql[nextNonSpace(sql, end)] === '.');
|
|
359
|
+
result += keepIdentifier ? sql.slice(i, end) : "'?'";
|
|
360
|
+
i = end;
|
|
361
|
+
previous = keepIdentifier ? 'word' : 'other';
|
|
362
|
+
previousWord = '';
|
|
363
|
+
// Literal com barra invertida cujo fim depende da configuração do servidor (literal comum do
|
|
364
|
+
// PostgreSQL, qualquer literal do MySQL): as duas leituras dão fins diferentes, e o que vem
|
|
365
|
+
// depois pode ser outro literal. Para nunca expor um valor, o resto do texto não é enviado.
|
|
366
|
+
if (backslash && !escapeString && send && (postgres || mysql)) {
|
|
367
|
+
cut();
|
|
160
368
|
break;
|
|
161
369
|
}
|
|
162
370
|
continue;
|
|
163
371
|
}
|
|
164
|
-
|
|
372
|
+
// SQLite: parâmetro com nome, inclusive o sufixo `(…)` do Tcl, que pode ter apóstrofo.
|
|
373
|
+
if (sqlite && (ch === '$' || ch === '@' || ch === ':' || ch === '#')) {
|
|
374
|
+
const end = sqliteVariableEnd(sql, i);
|
|
375
|
+
if (end < 0) {
|
|
376
|
+
cut();
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
if (end > i) {
|
|
380
|
+
const variable = sql.slice(i, end);
|
|
381
|
+
result += variable.includes('(') ? '?' : variable;
|
|
382
|
+
i = end;
|
|
383
|
+
previous = 'other';
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
const identifier = sticky(identifierPattern, sql, i);
|
|
165
388
|
if (identifier) {
|
|
166
389
|
result += identifier;
|
|
167
390
|
i += identifier.length;
|
|
168
391
|
identifierEnd = i;
|
|
169
|
-
identifierIsE = identifier === 'E' || identifier === 'e';
|
|
392
|
+
identifierIsE = postgres && (identifier === 'E' || identifier === 'e');
|
|
393
|
+
previous = 'word';
|
|
394
|
+
previousWord = identifier.toLowerCase();
|
|
170
395
|
continue;
|
|
171
396
|
}
|
|
172
|
-
// `$1
|
|
173
|
-
const param =
|
|
397
|
+
// Parâmetros: `$1` (o `$` logo depois dele começa outro token e pode abrir dollar-quoting) e `?1`.
|
|
398
|
+
const param = ch === '$' && !mysql && !sqlite ? sticky(PARAM, sql, i) : ch === '?' && !postgres ? sticky(QUESTION_PARAM, sql, i) : undefined;
|
|
174
399
|
if (param) {
|
|
175
|
-
result += param;
|
|
400
|
+
result += send ? '?' : param;
|
|
176
401
|
i += param.length;
|
|
402
|
+
previous = 'other';
|
|
177
403
|
continue;
|
|
178
404
|
}
|
|
179
|
-
const dollar =
|
|
405
|
+
const dollar = ch === '$' && postgres ? sticky(DOLLAR_TAG, sql, i) : undefined;
|
|
180
406
|
if (dollar) {
|
|
181
407
|
const end = sql.indexOf(dollar, i + dollar.length);
|
|
182
408
|
i = end < 0 ? sql.length : end + dollar.length;
|
|
183
409
|
result += "'?'";
|
|
410
|
+
previous = 'other';
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
// Números (no envio): o literal inteiro vira `?`. Um `.` depois de identificador é qualificação.
|
|
414
|
+
if (send && (isDigit(code) || (ch === '.' && previous !== 'word' && isDigit(sql.charCodeAt(i + 1))))) {
|
|
415
|
+
i = numberEnd(sql, i);
|
|
416
|
+
result += '?';
|
|
417
|
+
previous = 'other';
|
|
184
418
|
continue;
|
|
185
419
|
}
|
|
186
|
-
result +=
|
|
420
|
+
result += ch;
|
|
421
|
+
i++;
|
|
422
|
+
previous = ch === '.' ? 'dot' : 'other';
|
|
187
423
|
}
|
|
188
424
|
return result;
|
|
189
425
|
}
|
|
190
|
-
/**
|
|
191
|
-
* Comandos do SQL, sem literais, para a análise local (BEGIN/COMMIT/ROLLBACK em vários comandos).
|
|
192
|
-
* Lê o texto inteiro pela leitura padrão (`standard_conforming_strings`); nunca é enviado.
|
|
193
|
-
*/
|
|
194
|
-
export function sqlCommandText(sql) {
|
|
195
|
-
return redactSqlLiterals(sql, false).replace(/\s+/g, ' ').trim().toLowerCase();
|
|
196
|
-
}
|
|
197
426
|
/**
|
|
198
427
|
* `IN (?, ?, '?')` → `IN (?)`: itens separados por espaço e no máximo uma vírgula, vírgula final
|
|
199
428
|
* opcional. Escrita sem ambiguidade: depois de cada item o espaço só tem um jeito de ser consumido.
|
|
@@ -203,16 +432,19 @@ export function sqlCommandText(sql) {
|
|
|
203
432
|
* loop da aplicação a cada query (26 itens: 2,6 s).
|
|
204
433
|
*/
|
|
205
434
|
const IN_LIST = /\bin\s*\(\s*(?:(?:\?|'\?')\s*(?:,\s*)?)+\)/gi;
|
|
206
|
-
/**
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
435
|
+
/**
|
|
436
|
+
* SQL normalizado inteiro (sem o corte de 200 caracteres do nome do span): literais → `'?'`,
|
|
437
|
+
* números e parâmetros → `?`, `IN (...)` → `IN (?)`, comentários fora, espaços colapsados,
|
|
438
|
+
* minúsculas. `system` escolhe o dialeto (padrão PostgreSQL; desconhecido corta no primeiro
|
|
439
|
+
* delimitador que pode abrir literal).
|
|
440
|
+
*/
|
|
441
|
+
export function normalizeSqlFull(sql, system) {
|
|
442
|
+
const s = scanSql(sql, { dialect: sqlDialect(system), mode: 'send' }).replace(IN_LIST, 'IN (?)');
|
|
212
443
|
return s.replace(/\s+/g, ' ').trim().toLowerCase();
|
|
213
444
|
}
|
|
214
|
-
|
|
215
|
-
|
|
445
|
+
/** {@link normalizeSqlFull} com no máximo 200 caracteres (nome do span). */
|
|
446
|
+
export function normalizeSql(sql, system) {
|
|
447
|
+
const s = normalizeSqlFull(sql, system);
|
|
216
448
|
return s.length > 200 ? s.slice(0, 200) : s;
|
|
217
449
|
}
|
|
218
450
|
/** `db.query.text` vai até este tamanho (o resto é cortado); o fingerprint usa o texto inteiro. */
|
|
@@ -221,10 +453,11 @@ export const MAX_DB_QUERY_TEXT = 2048;
|
|
|
221
453
|
* Nome do span e atributos semconv de uma query: `db.query.text` (SQL normalizado, sem
|
|
222
454
|
* literais), `db.query.fingerprint` (16 hex do SHA-256 do SQL normalizado **inteiro**, calculado
|
|
223
455
|
* antes do corte de 200 caracteres do nome: duas queries com o mesmo prefixo não se fundem) e
|
|
224
|
-
* `db.operation.name` (primeira palavra: SELECT, INSERT, BEGIN…).
|
|
456
|
+
* `db.operation.name` (primeira palavra: SELECT, INSERT, BEGIN…). O nome e o `db.query.text` saem
|
|
457
|
+
* do mesmo lexer, o do dialeto de `system`.
|
|
225
458
|
*/
|
|
226
|
-
export function sqlSpanFields(sql) {
|
|
227
|
-
const full = normalizeSqlFull(sql);
|
|
459
|
+
export function sqlSpanFields(sql, system) {
|
|
460
|
+
const full = normalizeSqlFull(sql, system);
|
|
228
461
|
const operation = /^[a-z]+/.exec(full)?.[0]?.toUpperCase();
|
|
229
462
|
return {
|
|
230
463
|
name: full.length > 200 ? full.slice(0, 200) : full,
|
|
@@ -235,6 +468,77 @@ export function sqlSpanFields(sql) {
|
|
|
235
468
|
},
|
|
236
469
|
};
|
|
237
470
|
}
|
|
471
|
+
/**
|
|
472
|
+
* Comandos do SQL (PostgreSQL), sem literais, comentários nem o conteúdo de identificadores entre
|
|
473
|
+
* aspas, para a análise local de transações. Lê o texto inteiro; `escapeReading` lê o literal comum
|
|
474
|
+
* como com `standard_conforming_strings = off`. Nunca sai do processo.
|
|
475
|
+
*/
|
|
476
|
+
export function sqlCommandText(sql, escapeReading = false) {
|
|
477
|
+
return scanSql(sql, { dialect: 'postgresql', mode: 'analysis', escapeReading }).replace(/[ \t\n\v\f\r]+/g, ' ').trim().toLowerCase();
|
|
478
|
+
}
|
|
479
|
+
export function sqlTransactionCommand(statement) {
|
|
480
|
+
const s = statement.trim();
|
|
481
|
+
const chained = () => /\band\s+chain\b/.test(s) && !/\band\s+no\s+chain\b/.test(s);
|
|
482
|
+
if (/^(begin|start\s+transaction)\b/.test(s))
|
|
483
|
+
return 'begin';
|
|
484
|
+
if (/^(commit|end)\b/.test(s)) {
|
|
485
|
+
if (/^commit\s+prepared\b/.test(s))
|
|
486
|
+
return null;
|
|
487
|
+
return chained() ? 'chain' : 'commit';
|
|
488
|
+
}
|
|
489
|
+
if (/^(rollback|abort)\b/.test(s)) {
|
|
490
|
+
if (/^rollback(\s+(work|transaction))?\s+(to|prepared)\b/.test(s))
|
|
491
|
+
return null;
|
|
492
|
+
return chained() ? 'chain' : 'rollback';
|
|
493
|
+
}
|
|
494
|
+
if (/^prepare\s+transaction\b/.test(s))
|
|
495
|
+
return 'prepare';
|
|
496
|
+
return null;
|
|
497
|
+
}
|
|
498
|
+
/** Sem nenhuma destas palavras não há comando de transação: a análise nem roda (O1). */
|
|
499
|
+
const TRANSACTION_WORDS = /begin|start|commit|end|rollback|abort|prepare/i;
|
|
500
|
+
const NO_TRANSACTION = { count: 1, transaction: [], closes: false, ends: false, startsWithBegin: false };
|
|
501
|
+
/**
|
|
502
|
+
* Comandos de transação do texto. Com barra invertida no texto (só ela faz as leituras divergirem),
|
|
503
|
+
* lê pelas duas regras de `standard_conforming_strings`: o valor da sessão pode mudar por um `SET`
|
|
504
|
+
* ainda em voo, ou no próprio texto. `closes`/`ends` valem se qualquer leitura encerra: é o lado
|
|
505
|
+
* seguro para quem decide se outra query ainda roda dentro da transação. O valor conhecido da
|
|
506
|
+
* sessão só escolhe a leitura principal (a do servidor).
|
|
507
|
+
*/
|
|
508
|
+
export function analyzeSqlCommands(sql, standardConformingStrings) {
|
|
509
|
+
if (!TRANSACTION_WORDS.test(sql))
|
|
510
|
+
return NO_TRANSACTION;
|
|
511
|
+
const changesSetting = /standard_conforming_strings/i.test(sql);
|
|
512
|
+
const readings = sql.includes('\\') ? [false, true] : [false];
|
|
513
|
+
let primary = null;
|
|
514
|
+
let closes = false;
|
|
515
|
+
let ends = false;
|
|
516
|
+
for (const escapeReading of readings) {
|
|
517
|
+
const statements = sqlCommandText(sql, escapeReading).split(';').filter((statement) => statement.trim());
|
|
518
|
+
const transaction = [];
|
|
519
|
+
for (const statement of statements) {
|
|
520
|
+
const command = sqlTransactionCommand(statement);
|
|
521
|
+
if (!command)
|
|
522
|
+
continue;
|
|
523
|
+
transaction.push(command);
|
|
524
|
+
if (command !== 'begin')
|
|
525
|
+
closes = true;
|
|
526
|
+
if (command === 'commit' || command === 'rollback' || command === 'prepare')
|
|
527
|
+
ends = true;
|
|
528
|
+
}
|
|
529
|
+
// A leitura do servidor (`off` só quando ele disse) é a principal; desconhecido = padrão.
|
|
530
|
+
const isPrimary = escapeReading === (standardConformingStrings === 'off' && !changesSetting);
|
|
531
|
+
if (isPrimary || !primary)
|
|
532
|
+
primary = { count: statements.length, transaction, first: statements.length > 0 ? sqlTransactionCommand(statements[0]) : null };
|
|
533
|
+
}
|
|
534
|
+
return {
|
|
535
|
+
count: primary.count,
|
|
536
|
+
transaction: primary.transaction,
|
|
537
|
+
closes,
|
|
538
|
+
ends,
|
|
539
|
+
startsWithBegin: primary.first === 'begin',
|
|
540
|
+
};
|
|
541
|
+
}
|
|
238
542
|
const LOCK_OUTCOMES = {
|
|
239
543
|
'40P01': 'deadlock',
|
|
240
544
|
'55P03': 'lock_not_available',
|
package/dist/normalize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
|