@palbase/backend 38.0.15 → 39.0.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/dist/bin/palbase-backend.cjs +46 -1
- package/dist/bin/palbase-backend.cjs.map +1 -1
- package/dist/bin/palbase-backend.js +5 -5
- package/dist/{chunk-LFUNRWUE.js → chunk-4J6I4KVQ.js} +67 -3
- package/dist/{chunk-LFUNRWUE.js.map → chunk-4J6I4KVQ.js.map} +1 -1
- package/dist/{chunk-7WAGQ3VR.js → chunk-AR2I4M7I.js} +497 -17
- package/dist/chunk-AR2I4M7I.js.map +1 -0
- package/dist/{chunk-YANGWAIM.js → chunk-H7EKL6HC.js} +2 -2
- package/dist/{chunk-EHKEMHB4.js → chunk-JJSR4BUX.js} +49 -5
- package/dist/chunk-JJSR4BUX.js.map +1 -0
- package/dist/{chunk-CS6NQ6PO.js → chunk-JPTFYHP3.js} +2 -2
- package/dist/{chunk-CS6NQ6PO.js.map → chunk-JPTFYHP3.js.map} +1 -1
- package/dist/{chunk-X7UR3VXA.js → chunk-XZWOMPD3.js} +3 -2
- package/dist/chunk-XZWOMPD3.js.map +1 -0
- package/dist/{chunk-PDD55QWN.js → chunk-ZNQDL466.js} +2 -2
- package/dist/db/index.cjs +378 -14
- package/dist/db/index.cjs.map +1 -1
- package/dist/db/index.d.cts +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +3 -3
- package/dist/engine/index.cjs +46 -1
- package/dist/engine/index.cjs.map +1 -1
- package/dist/engine/index.d.cts +3 -3
- package/dist/engine/index.d.ts +3 -3
- package/dist/engine/index.js +5 -5
- package/dist/{index-CI7S0Wqv.d.cts → index-B0mjUnxy.d.cts} +25 -2
- package/dist/{index-CUy50OLU.d.ts → index-eN4KzGa5.d.ts} +555 -29
- package/dist/{index-DRx880KY.d.cts → index-pK2At5Yc.d.cts} +555 -29
- package/dist/{index-Ogi30dbt.d.ts → index-yDno9Ju9.d.ts} +25 -2
- package/dist/index.cjs +628 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +183 -8
- package/dist/index.d.ts +183 -8
- package/dist/index.js +74 -6
- package/dist/index.js.map +1 -1
- package/dist/openapi/index.cjs.map +1 -1
- package/dist/openapi/index.d.cts +2 -2
- package/dist/openapi/index.d.ts +2 -2
- package/dist/openapi/index.js +2 -2
- package/dist/{registry-C7UCkQf0.d.cts → registry-9dNeVN5d.d.cts} +1 -1
- package/dist/{registry-DJcvbomD.d.ts → registry-B8ddZiMY.d.ts} +1 -1
- package/dist/test/index.cjs +19 -0
- package/dist/test/index.cjs.map +1 -1
- package/dist/test/index.d.cts +1 -1
- package/dist/test/index.d.ts +1 -1
- package/dist/test/index.js +20 -2
- package/dist/test/index.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/database.md +79 -0
- package/docs/llms-full.txt +462 -33
- package/docs/schema.md +382 -32
- package/package.json +1 -1
- package/template/package.json +1 -1
- package/dist/chunk-7WAGQ3VR.js.map +0 -1
- package/dist/chunk-EHKEMHB4.js.map +0 -1
- package/dist/chunk-X7UR3VXA.js.map +0 -1
- /package/dist/{chunk-YANGWAIM.js.map → chunk-H7EKL6HC.js.map} +0 -0
- /package/dist/{chunk-PDD55QWN.js.map → chunk-ZNQDL466.js.map} +0 -0
|
@@ -897,6 +897,7 @@ function makeTypedSurface(raw) {
|
|
|
897
897
|
$facets: /* @__PURE__ */ __name((table, params) => reco.facets(table, params), "$facets"),
|
|
898
898
|
$claim: /* @__PURE__ */ __name((table, unique, extra) => reco.claim(table, unique, extra), "$claim"),
|
|
899
899
|
$lockRows: /* @__PURE__ */ __name((table, ids) => reco.lockRows(table, ids), "$lockRows"),
|
|
900
|
+
$lockRowsWhere: /* @__PURE__ */ __name((table, where, opts) => reco.lockRowsWhere(table, where, opts), "$lockRowsWhere"),
|
|
900
901
|
$advisoryXactLock: /* @__PURE__ */ __name((key2) => reco.advisoryXactLock(key2), "$advisoryXactLock"),
|
|
901
902
|
$aggregate: /* @__PURE__ */ __name((table, q) => raw.aggregate(table, q), "$aggregate"),
|
|
902
903
|
$insertMany: /* @__PURE__ */ __name((table, rows, opts) => raw.insertMany(table, rows, opts), "$insertMany"),
|
|
@@ -1231,7 +1232,7 @@ var DeadlockDetected = class extends Conflict {
|
|
|
1231
1232
|
return typeof e === "object" && e !== null && e.name === "DeadlockDetected";
|
|
1232
1233
|
}
|
|
1233
1234
|
constructor(sqlstate = SQLSTATE.deadlockDetected, message, data) {
|
|
1234
|
-
super(message ?? "deadlock: iki i\u015Flem birbirinin kilidini bekledi ve bu i\u015Flem iptal edildi \u2014 kilit s\u0131ras\u0131n\u0131
|
|
1235
|
+
super(message ?? "deadlock: iki i\u015Flem birbirinin kilidini bekledi ve bu i\u015Flem iptal edildi \u2014 kilit s\u0131ras\u0131n\u0131 sabitleyin: id'ler elinizdeyse Database.$lockRows(tablo, id'ler), elinizde bir filtre varsa Database.$lockRowsWhere(tablo, filtre) kullan\u0131n", "deadlock_detected", data);
|
|
1235
1236
|
this.name = "DeadlockDetected";
|
|
1236
1237
|
this.sqlstate = sqlstate;
|
|
1237
1238
|
}
|
|
@@ -3016,6 +3017,11 @@ var WHERE_OPS = {
|
|
|
3016
3017
|
lte: "<=",
|
|
3017
3018
|
neq: "<>"
|
|
3018
3019
|
};
|
|
3020
|
+
var LOCK_MODES = {
|
|
3021
|
+
update: "FOR UPDATE",
|
|
3022
|
+
share: "FOR SHARE",
|
|
3023
|
+
noKeyUpdate: "FOR NO KEY UPDATE"
|
|
3024
|
+
};
|
|
3019
3025
|
function ftsExprOf(ftsCols) {
|
|
3020
3026
|
return [
|
|
3021
3027
|
...ftsCols
|
|
@@ -4009,6 +4015,45 @@ function createOps(tx, context = {}) {
|
|
|
4009
4015
|
await (await at()).unsafe(`SELECT t.${quoteIdent(pk)} FROM ${quoteTable(table)} t WHERE t.${quoteIdent(pk)} IN (${list}) ORDER BY t.${quoteIdent(pk)} FOR NO KEY UPDATE`, params);
|
|
4010
4016
|
},
|
|
4011
4017
|
/**
|
|
4018
|
+
* Bir FİLTRENİN eşleştiği satırları kilitle — sırayı yine KATMAN koyar
|
|
4019
|
+
* (FR-037).
|
|
4020
|
+
*
|
|
4021
|
+
* `lockRows` kilitlenecek kümeyi çağıranın SAYMASINI istiyor. "Bu hesabın
|
|
4022
|
+
* bekleyen bütün hareketlerini kilitle" bunu yapamaz: id listesi ancak bir
|
|
4023
|
+
* sorguyla çıkar, ve SORGU İLE KİLİT ARASINDAKİ BOŞLUK tam olarak kilidin
|
|
4024
|
+
* kapatması gereken yarıştır — araya giren bir INSERT o listede yoktur ve
|
|
4025
|
+
* kilitlenmez. Burada küme TEK statement'ta hem seçiliyor hem kilitleniyor.
|
|
4026
|
+
*
|
|
4027
|
+
* `ORDER BY <pk>`: `updateMany`'nin kilit CTE'siyle AYNI sıra (FR-037b).
|
|
4028
|
+
* Sırayı iki yolun da katmandan alması, aynı satır kümesine giren iki
|
|
4029
|
+
* transaction'ın ters sırada kilitlemesini imkânsız kılıyor — deadlock'un
|
|
4030
|
+
* bedeli ucuz değil, `deadlock_timeout` varsayılanı 1 SANİYE.
|
|
4031
|
+
*
|
|
4032
|
+
* KİLİT MODU EŞİTLENMEZ (FR-037b): `updateMany` işi UPDATE olduğu için
|
|
4033
|
+
* `FOR NO KEY UPDATE` kullanıyor, ama burada mod ÇAĞIRANIN seçimi. Herkesi
|
|
4034
|
+
* o moda zorlamak, yalnız okuma kilidi isteyeni ihtiyacından fazlasını
|
|
4035
|
+
* almaya zorlardı. Deadlock'u önleyen SIRADIR, mod değil.
|
|
4036
|
+
*/
|
|
4037
|
+
async lockRowsWhere(table, where, opts) {
|
|
4038
|
+
const mode = opts?.mode ?? "update";
|
|
4039
|
+
const clause = LOCK_MODES[mode];
|
|
4040
|
+
if (clause === void 0) {
|
|
4041
|
+
throw new Error(`lockRowsWhere(${table}): bilinmeyen mode "${String(mode)}" \u2014 "update" (FOR UPDATE), "share" (FOR SHARE) ya da "noKeyUpdate" (FOR NO KEY UPDATE).`);
|
|
4042
|
+
}
|
|
4043
|
+
const pk = primaryKeyOf(table);
|
|
4044
|
+
if (pk === null) {
|
|
4045
|
+
throw new Error(`lockRowsWhere(${table}): tek-kolon primary key bulunamad\u0131 \u2014 kilit s\u0131ras\u0131 bir anahtar ister (FR-037).`);
|
|
4046
|
+
}
|
|
4047
|
+
const params = [];
|
|
4048
|
+
const add = /* @__PURE__ */ __name((v) => {
|
|
4049
|
+
params.push(v);
|
|
4050
|
+
return `$${params.length}`;
|
|
4051
|
+
}, "add");
|
|
4052
|
+
const whereSql = compileWhere(table, schemaColumns(table), where, add, "lockRowsWhere");
|
|
4053
|
+
assertHasPredicate(whereSql, "lockRowsWhere", table);
|
|
4054
|
+
await (await at()).unsafe(`SELECT t.${quoteIdent(pk)} FROM ${quoteTable(table)} t WHERE true${whereSql} ORDER BY t.${quoteIdent(pk)} ${clause}`, params);
|
|
4055
|
+
},
|
|
4056
|
+
/**
|
|
4012
4057
|
* Bir idempotency anahtarını SAHİPLEN (FR-033).
|
|
4013
4058
|
*
|
|
4014
4059
|
* `{ inserted: true, row }` → bu çağrı yazdı.
|