w-orm-postgresql 1.0.9 → 1.0.10
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/README.md +8 -8
- package/dist/w-orm-postgresql.umd.js +2 -2
- package/dist/w-orm-postgresql.umd.js.map +1 -1
- package/docs/WOrmPostgresql.html +119 -27
- package/docs/WOrmPostgresql.mjs.html +93 -49
- package/docs/index.html +2 -2
- package/g-basic.mjs +8 -8
- package/package.json +1 -1
- package/src/WOrmPostgresql.mjs +91 -47
- package/test/api-postgresql.test.mjs +168 -36
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<nav >
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmPostgresql.html">WOrmPostgresql</a><ul class='methods'><li data-type='method'><a href="WOrmPostgresql.html#.createTable">createTable</a></li><li data-type='method'><a href="WOrmPostgresql.html#.del">del</a></li><li data-type='method'><a href="WOrmPostgresql.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmPostgresql.html#.insert">insert</a></li><li data-type='method'><a href="WOrmPostgresql.html#.save">save</a></li><li data-type='method'><a href="WOrmPostgresql.html#.select">select</a></li><li data-type='method'><a href="WOrmPostgresql.html#.
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmPostgresql.html">WOrmPostgresql</a><ul class='methods'><li data-type='method'><a href="WOrmPostgresql.html#.createTable">createTable</a></li><li data-type='method'><a href="WOrmPostgresql.html#.del">del</a></li><li data-type='method'><a href="WOrmPostgresql.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmPostgresql.html#.insert">insert</a></li><li data-type='method'><a href="WOrmPostgresql.html#.save">save</a></li><li data-type='method'><a href="WOrmPostgresql.html#.select">select</a></li><li data-type='method'><a href="WOrmPostgresql.html#.selectByPk">selectByPk</a></li></ul></li></ul>
|
|
33
33
|
|
|
34
34
|
</nav>
|
|
35
35
|
|
|
@@ -73,11 +73,16 @@ import pmSeries from 'wsemi/src/pmSeries.mjs'
|
|
|
73
73
|
/**
|
|
74
74
|
* 操作資料庫(PostgreSQL)
|
|
75
75
|
*
|
|
76
|
+
* 本套件之主鍵欄位由opt.pk指定,預設為time,select以外之五函數皆以此欄位認定主鍵。
|
|
77
|
+
* 因主鍵得為承載業務語義之欄位(如時序資料之觀測時間),insert與save於輸入未帶有效主鍵值時不自動補值,
|
|
78
|
+
* 一律以reject回報;del亦不補值,該筆回ok:0與err。
|
|
79
|
+
*
|
|
76
80
|
* @class
|
|
77
81
|
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
78
82
|
* @param {String} [opt.url='postgresql://127.0.0.1:5432'] 輸入連接資料庫字串,預設'postgresql://127.0.0.1:5432'
|
|
79
83
|
* @param {String} [opt.db='worm'] 輸入使用資料庫名稱字串,預設'worm'
|
|
80
84
|
* @param {String} [opt.cl='test'] 輸入使用資料表名稱字串,預設'test'
|
|
85
|
+
* @param {String} [opt.pk='time'] 輸入主鍵欄位名字串,預設'time'
|
|
81
86
|
* @param {Boolean} [opt.useCache=false] 輸入是否使用select快取,適用於單程序操作,預設false
|
|
82
87
|
* @returns {Object} 回傳操作資料庫物件,各事件功能詳見說明
|
|
83
88
|
*/
|
|
@@ -110,6 +115,26 @@ function WOrmPostgresql(opt = {}) {
|
|
|
110
115
|
useCache = false
|
|
111
116
|
}
|
|
112
117
|
|
|
118
|
+
//pkName, 主鍵欄位名, select以外之五函數皆以此欄位認定主鍵, 預設為time
|
|
119
|
+
let pkName = get(opt, 'pk')
|
|
120
|
+
if (!isestr(pkName)) {
|
|
121
|
+
pkName = 'time'
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
//checkPk, 判定主鍵值是否有效
|
|
125
|
+
//因主鍵欄位得由呼叫端指定, 其型別隨欄位而異, 故此處僅要求有給值而不限定型別,
|
|
126
|
+
//型別與欄位不符者由PostgreSQL回報, 各函數再依其規格處置
|
|
127
|
+
function checkPk(pkv) {
|
|
128
|
+
return isestr(pkv) || isnum(pkv) || isbol(pkv) || isDate(pkv)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
//isErrPkType, 判定錯誤是否為[主鍵值型別與欄位不符]
|
|
132
|
+
//22P02為invalid_text_representation, 22007為invalid_datetime_format
|
|
133
|
+
function isErrPkType(err) {
|
|
134
|
+
let code = get(err, 'code')
|
|
135
|
+
return code === '22P02' || code === '22007'
|
|
136
|
+
}
|
|
137
|
+
|
|
113
138
|
//getValueType
|
|
114
139
|
function getValueType(value) {
|
|
115
140
|
if (isstr(value)) {
|
|
@@ -162,7 +187,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
162
187
|
let allKeys = keys(obj)
|
|
163
188
|
|
|
164
189
|
//conflictKeys
|
|
165
|
-
let conflictKeys = [
|
|
190
|
+
let conflictKeys = [pkName]
|
|
166
191
|
|
|
167
192
|
//updateKeys
|
|
168
193
|
let updateKeys = filter(allKeys, (k) => {
|
|
@@ -237,14 +262,22 @@ function WOrmPostgresql(opt = {}) {
|
|
|
237
262
|
|
|
238
263
|
/**
|
|
239
264
|
* 創建資料表
|
|
265
|
+
* 註: pk未給時採建構時之opt.pk。因insert與save倚賴主鍵之唯一約束達成原子性,
|
|
266
|
+
* 若給予與opt.pk不同之欄位,將建出其餘函數無法正確操作之資料表,故一般應留空或給予相同值
|
|
240
267
|
*
|
|
241
268
|
* @memberOf WOrmPostgresql
|
|
242
269
|
* @param {String} cl 輸入資料表名字串
|
|
243
|
-
* @param {String} pk
|
|
270
|
+
* @param {String} [pk=opt.pk] 輸入主鍵欄位名字串,預設為建構時之opt.pk
|
|
244
271
|
* @param {Array|Object} arr 輸入數據物件陣列或數據物件
|
|
245
272
|
* @returns {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
|
|
246
273
|
*/
|
|
247
274
|
async function createTable(cl, pk, arr) {
|
|
275
|
+
|
|
276
|
+
//pk, 未給時採建構時設定之主鍵欄位
|
|
277
|
+
if (!isestr(pk)) {
|
|
278
|
+
pk = pkName
|
|
279
|
+
}
|
|
280
|
+
|
|
248
281
|
let isErr = false
|
|
249
282
|
let res = null
|
|
250
283
|
|
|
@@ -415,29 +448,29 @@ function WOrmPostgresql(opt = {}) {
|
|
|
415
448
|
}
|
|
416
449
|
|
|
417
450
|
/**
|
|
418
|
-
*
|
|
451
|
+
* 由主鍵查詢單筆數據,因直接由資料表主鍵索引取值,不需如select提取數據至前端再處理,故數據量大時效能較佳
|
|
452
|
+
* 註: 本套件之主鍵欄位由建構時之opt.pk指定,預設為time
|
|
419
453
|
*
|
|
420
|
-
* 函數名依主鍵欄位命名為selectByTime而不另掛selectById別名,因本套件之主鍵為具業務語義之time,
|
|
421
|
-
* 與以無語義識別碼為主鍵者性質不同,該差異須由呼叫端知悉而非由別名掩蓋。
|
|
422
454
|
* 主鍵未命中或主鍵值無效皆回傳null而不reject,命中之判定基準與insert、save、del內對既有數據之認定一致。
|
|
455
|
+
* 主鍵值之型別與欄位不符時PostgreSQL回報22P02或22007,亦屬主鍵值無效而回傳null。
|
|
423
456
|
*
|
|
424
457
|
* @memberOf WOrmPostgresql
|
|
425
|
-
* @param {String|Date}
|
|
426
|
-
* @returns {Promise} 回傳Promise,resolve
|
|
458
|
+
* @param {String|Number|Date} pk 輸入主鍵值,即數據之主鍵欄位值
|
|
459
|
+
* @returns {Promise} 回傳Promise,resolve回傳數據物件,若無此主鍵則回傳null,reject回傳錯誤訊息
|
|
427
460
|
*/
|
|
428
|
-
async function
|
|
461
|
+
async function selectByPk(pk) {
|
|
429
462
|
let isErr = false
|
|
430
463
|
let res = null
|
|
431
464
|
|
|
432
465
|
//check
|
|
433
|
-
if (!
|
|
434
|
-
//未給有效主鍵值視為查無數據, 判定基準與insert、save、del
|
|
466
|
+
if (!checkPk(pk)) {
|
|
467
|
+
//未給有效主鍵值視為查無數據, 判定基準與insert、save、del內對主鍵之認定一致
|
|
435
468
|
return null
|
|
436
469
|
}
|
|
437
470
|
|
|
438
|
-
//find,
|
|
471
|
+
//find, 以建構時設定之主鍵欄位查找, 與insert、save、del、genConflictSQL之認定一致
|
|
439
472
|
let find = {
|
|
440
|
-
|
|
473
|
+
[pkName]: pk,
|
|
441
474
|
}
|
|
442
475
|
|
|
443
476
|
//cache, 與select共用快取, 因快取鍵值由find與order組成, 故此處等同select(find)之結果
|
|
@@ -491,7 +524,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
491
524
|
|
|
492
525
|
//check
|
|
493
526
|
if (!isarr(rows)) {
|
|
494
|
-
throw new Error(`can not select by
|
|
527
|
+
throw new Error(`can not select by pk[${pk}]`)
|
|
495
528
|
}
|
|
496
529
|
|
|
497
530
|
//cache
|
|
@@ -507,14 +540,22 @@ function WOrmPostgresql(opt = {}) {
|
|
|
507
540
|
res = v
|
|
508
541
|
}
|
|
509
542
|
else {
|
|
510
|
-
|
|
543
|
+
//不存在主鍵, 回傳null
|
|
511
544
|
res = null
|
|
512
545
|
}
|
|
513
546
|
|
|
514
547
|
}
|
|
515
548
|
catch (err) {
|
|
516
|
-
|
|
517
|
-
|
|
549
|
+
|
|
550
|
+
//check, 主鍵值之型別與欄位不符者亦屬主鍵值無效, 依規格回傳null而不reject
|
|
551
|
+
if (isErrPkType(err)) {
|
|
552
|
+
res = null
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
isErr = true
|
|
556
|
+
res = err
|
|
557
|
+
}
|
|
558
|
+
|
|
518
559
|
}
|
|
519
560
|
finally {
|
|
520
561
|
await client.end()
|
|
@@ -531,11 +572,11 @@ function WOrmPostgresql(opt = {}) {
|
|
|
531
572
|
}
|
|
532
573
|
|
|
533
574
|
/**
|
|
534
|
-
*
|
|
575
|
+
* 插入數據,僅於主鍵不存在時寫入,已存在者跳過且不覆寫
|
|
535
576
|
*
|
|
536
577
|
* n為輸入筆數,即本次嘗試插入之基準;nInserted為實際插入筆數,全數已存在而nInserted為0屬正常結果,
|
|
537
|
-
*
|
|
538
|
-
*
|
|
578
|
+
* 不視為錯誤。同批含重複主鍵時僅首筆計入nInserted。
|
|
579
|
+
* 因主鍵得承載業務語義,未帶有效主鍵值時不自動補值,一律以reject回報。
|
|
539
580
|
*
|
|
540
581
|
* @memberOf WOrmPostgresql
|
|
541
582
|
* @param {Object|Array} data 輸入數據物件或陣列
|
|
@@ -585,10 +626,10 @@ function WOrmPostgresql(opt = {}) {
|
|
|
585
626
|
data = [data]
|
|
586
627
|
}
|
|
587
628
|
|
|
588
|
-
//check
|
|
629
|
+
//check pk, 因主鍵得承載業務語義故不自動補值, 未帶有效主鍵值者屬整批性錯誤
|
|
589
630
|
data = map(data, function(v, k) {
|
|
590
|
-
if (!
|
|
591
|
-
throw new Error(`invalid data[${k}]
|
|
631
|
+
if (!checkPk(get(v, pkName))) {
|
|
632
|
+
throw new Error(`invalid data[${k}].${pkName}[${get(v, pkName)}]`)
|
|
592
633
|
}
|
|
593
634
|
return v
|
|
594
635
|
})
|
|
@@ -603,10 +644,10 @@ function WOrmPostgresql(opt = {}) {
|
|
|
603
644
|
// console.log('mr.query', mr.query)
|
|
604
645
|
// console.log('mr.values', mr.values)
|
|
605
646
|
|
|
606
|
-
//添加conflict,
|
|
607
|
-
//由PostgreSQL於單一語句內原子完成[
|
|
608
|
-
|
|
609
|
-
let sql = `${mr.query} ON CONFLICT (
|
|
647
|
+
//添加conflict, 令已存在主鍵者跳過而不中斷整批插入, 主鍵認定與genConflictSQL一致
|
|
648
|
+
//由PostgreSQL於單一語句內原子完成[檢查主鍵未存在]與[寫入], 併發時同一主鍵僅有一次成功,
|
|
649
|
+
//同批含重複主鍵時亦僅首筆成功, 故不須逐筆插入即可取得實際插入筆數
|
|
650
|
+
let sql = `${mr.query} ON CONFLICT (${pkName}) DO NOTHING`
|
|
610
651
|
|
|
611
652
|
//nAll
|
|
612
653
|
let nAll = size(data)
|
|
@@ -670,7 +711,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
670
711
|
* [內容相同]之判定基準為待寫入物件合併進現值後與現值相同,非待寫入物件與現值全等,
|
|
671
712
|
* 故只給部份欄位且該些欄位值皆與現值相同時,合併結果等於現值,nModified為0,
|
|
672
713
|
* 令nModified忠實反映資料庫端是否真的寫入。
|
|
673
|
-
*
|
|
714
|
+
* 因主鍵得承載業務語義,未帶有效主鍵值時不自動補值,一律以reject回報。
|
|
674
715
|
*
|
|
675
716
|
* @memberOf WOrmPostgresql
|
|
676
717
|
* @param {Object|Array} data 輸入數據物件或陣列
|
|
@@ -721,10 +762,10 @@ function WOrmPostgresql(opt = {}) {
|
|
|
721
762
|
data = [data]
|
|
722
763
|
}
|
|
723
764
|
|
|
724
|
-
//check
|
|
765
|
+
//check pk, 因主鍵得承載業務語義故不自動補值, 未帶有效主鍵值者屬整批性錯誤
|
|
725
766
|
data = map(data, function(v, k) {
|
|
726
|
-
if (!
|
|
727
|
-
throw new Error(`invalid data[${k}]
|
|
767
|
+
if (!checkPk(get(v, pkName))) {
|
|
768
|
+
throw new Error(`invalid data[${k}].${pkName}[${get(v, pkName)}]`)
|
|
728
769
|
}
|
|
729
770
|
return v
|
|
730
771
|
})
|
|
@@ -735,6 +776,9 @@ function WOrmPostgresql(opt = {}) {
|
|
|
735
776
|
//rest
|
|
736
777
|
let rest = null
|
|
737
778
|
|
|
779
|
+
//pkv
|
|
780
|
+
let pkv = get(v, pkName)
|
|
781
|
+
|
|
738
782
|
//_v
|
|
739
783
|
let _v = null
|
|
740
784
|
if (true) {
|
|
@@ -744,7 +788,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
744
788
|
type: 'select',
|
|
745
789
|
table: cl,
|
|
746
790
|
where: {
|
|
747
|
-
|
|
791
|
+
[pkName]: pkv,
|
|
748
792
|
},
|
|
749
793
|
// limit: 10,
|
|
750
794
|
// order,
|
|
@@ -773,7 +817,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
773
817
|
if (iseobj(_v)) {
|
|
774
818
|
|
|
775
819
|
//_vt
|
|
776
|
-
let _vt = omit(_v,
|
|
820
|
+
let _vt = omit(_v, pkName)
|
|
777
821
|
// console.log('_vt', _vt)
|
|
778
822
|
|
|
779
823
|
//vt, [內容相同]之判定基準為[待寫入物件合併進現值後與現值相同],
|
|
@@ -781,7 +825,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
781
825
|
//合併採淺層覆蓋, 與後端以EXCLUDED整欄取代之寫入行為一致
|
|
782
826
|
let vt = {
|
|
783
827
|
..._vt,
|
|
784
|
-
...omit(v,
|
|
828
|
+
...omit(v, pkName),
|
|
785
829
|
}
|
|
786
830
|
// console.log('vt', vt)
|
|
787
831
|
|
|
@@ -836,11 +880,11 @@ function WOrmPostgresql(opt = {}) {
|
|
|
836
880
|
// console.log('mr.query', mr.query)
|
|
837
881
|
// console.log('mr.values', mr.values)
|
|
838
882
|
|
|
839
|
-
//添加conflict,
|
|
840
|
-
//此時退回DO NOTHING,
|
|
883
|
+
//添加conflict, 僅有主鍵欄位時genConflictSQL無可更新欄位而回傳空字串,
|
|
884
|
+
//此時退回DO NOTHING, 以免併發插入同一主鍵者報錯
|
|
841
885
|
let conflict = genConflictSQL(v)
|
|
842
886
|
if (!isestr(conflict)) {
|
|
843
|
-
conflict =
|
|
887
|
+
conflict = `ON CONFLICT (${pkName}) DO NOTHING`
|
|
844
888
|
}
|
|
845
889
|
|
|
846
890
|
//sql, xmax為0表該列由本語句插入, 非0表係由DO UPDATE更新而來,
|
|
@@ -911,15 +955,15 @@ function WOrmPostgresql(opt = {}) {
|
|
|
911
955
|
}
|
|
912
956
|
else {
|
|
913
957
|
//未開啟autoInsert則僅能更新既有數據, 不可用INSERT以免無中生有,
|
|
914
|
-
//由UPDATE...WHERE
|
|
958
|
+
//由UPDATE...WHERE主鍵原子完成[查找主鍵]與[更新], 併發時不會遺失更新
|
|
915
959
|
|
|
916
960
|
//mr
|
|
917
961
|
let mr = mongoSql.sql({
|
|
918
962
|
type: 'update',
|
|
919
963
|
table: cl,
|
|
920
|
-
updates: omit(v,
|
|
964
|
+
updates: omit(v, pkName),
|
|
921
965
|
where: {
|
|
922
|
-
|
|
966
|
+
[pkName]: pkv,
|
|
923
967
|
},
|
|
924
968
|
})
|
|
925
969
|
// console.log('mr', mr)
|
|
@@ -1014,7 +1058,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
1014
1058
|
*
|
|
1015
1059
|
* 回傳陣列恆與輸入等長,各筆之n與nDeleted皆為主鍵命中筆數,值為0或1,未命中為0且屬正常結果。
|
|
1016
1060
|
* 判斷某筆是否真的被刪除一律以nDeleted為準。
|
|
1017
|
-
*
|
|
1061
|
+
* 未帶有效主鍵值者為該筆之輸入問題,回ok:0與err且不送查詢,不中斷其餘筆數,
|
|
1018
1062
|
* 以此與[主鍵未命中]之ok:1區辨。
|
|
1019
1063
|
*
|
|
1020
1064
|
* @memberOf WOrmPostgresql
|
|
@@ -1071,19 +1115,19 @@ function WOrmPostgresql(opt = {}) {
|
|
|
1071
1115
|
//rest
|
|
1072
1116
|
let rest = null
|
|
1073
1117
|
|
|
1074
|
-
//
|
|
1075
|
-
let
|
|
1118
|
+
//pkv
|
|
1119
|
+
let pkv = get(v, pkName)
|
|
1076
1120
|
|
|
1077
|
-
//check
|
|
1121
|
+
//check pk, 未帶有效主鍵者不補值亦不送查詢,
|
|
1078
1122
|
//因mongo-sql會將無效值轉為null而誤中其他數據, 故直接視為該筆無法處理
|
|
1079
|
-
if (!
|
|
1123
|
+
if (!checkPk(pkv)) {
|
|
1080
1124
|
|
|
1081
1125
|
//rest
|
|
1082
1126
|
rest = {
|
|
1083
1127
|
n: 0,
|
|
1084
1128
|
nDeleted: 0,
|
|
1085
1129
|
ok: 0,
|
|
1086
|
-
err: `invalid
|
|
1130
|
+
err: `invalid ${pkName}[${pkv}]`,
|
|
1087
1131
|
}
|
|
1088
1132
|
|
|
1089
1133
|
return rest
|
|
@@ -1094,7 +1138,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
1094
1138
|
type: 'delete',
|
|
1095
1139
|
table: cl,
|
|
1096
1140
|
where: {
|
|
1097
|
-
|
|
1141
|
+
[pkName]: pkv,
|
|
1098
1142
|
},
|
|
1099
1143
|
})
|
|
1100
1144
|
// console.log('mr', mr)
|
|
@@ -1275,7 +1319,7 @@ function WOrmPostgresql(opt = {}) {
|
|
|
1275
1319
|
//save
|
|
1276
1320
|
ee.createTable = createTable
|
|
1277
1321
|
ee.select = select
|
|
1278
|
-
ee.
|
|
1322
|
+
ee.selectByPk = selectByPk
|
|
1279
1323
|
ee.insert = insert
|
|
1280
1324
|
ee.save = save
|
|
1281
1325
|
ee.del = del
|
|
@@ -1300,7 +1344,7 @@ export default WOrmPostgresql
|
|
|
1300
1344
|
<br class="clear">
|
|
1301
1345
|
|
|
1302
1346
|
<footer>
|
|
1303
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sun Aug 16 2026
|
|
1347
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sun Aug 16 2026 23:54:17 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
1304
1348
|
</footer>
|
|
1305
1349
|
|
|
1306
1350
|
<script>prettyPrint();</script>
|
package/docs/index.html
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<nav >
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmPostgresql.html">WOrmPostgresql</a><ul class='methods'><li data-type='method'><a href="WOrmPostgresql.html#.createTable">createTable</a></li><li data-type='method'><a href="WOrmPostgresql.html#.del">del</a></li><li data-type='method'><a href="WOrmPostgresql.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmPostgresql.html#.insert">insert</a></li><li data-type='method'><a href="WOrmPostgresql.html#.save">save</a></li><li data-type='method'><a href="WOrmPostgresql.html#.select">select</a></li><li data-type='method'><a href="WOrmPostgresql.html#.
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmPostgresql.html">WOrmPostgresql</a><ul class='methods'><li data-type='method'><a href="WOrmPostgresql.html#.createTable">createTable</a></li><li data-type='method'><a href="WOrmPostgresql.html#.del">del</a></li><li data-type='method'><a href="WOrmPostgresql.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmPostgresql.html#.insert">insert</a></li><li data-type='method'><a href="WOrmPostgresql.html#.save">save</a></li><li data-type='method'><a href="WOrmPostgresql.html#.select">select</a></li><li data-type='method'><a href="WOrmPostgresql.html#.selectByPk">selectByPk</a></li></ul></li></ul>
|
|
33
33
|
|
|
34
34
|
</nav>
|
|
35
35
|
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
<br class="clear">
|
|
72
72
|
|
|
73
73
|
<footer>
|
|
74
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sun Aug 16 2026
|
|
74
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sun Aug 16 2026 23:54:17 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
75
75
|
</footer>
|
|
76
76
|
|
|
77
77
|
<script>prettyPrint();</script>
|
package/g-basic.mjs
CHANGED
|
@@ -168,13 +168,13 @@ async function test() {
|
|
|
168
168
|
let so = await wo.select({ name: 'rosemary' })
|
|
169
169
|
console.log('select by name', so)
|
|
170
170
|
|
|
171
|
-
//
|
|
172
|
-
let sb = await wo.
|
|
173
|
-
console.log('
|
|
171
|
+
//selectByPk
|
|
172
|
+
let sb = await wo.selectByPk('2025-01-01T00:10:00Z')
|
|
173
|
+
console.log('selectByPk', sb)
|
|
174
174
|
|
|
175
|
-
//
|
|
176
|
-
let sbn = await wo.
|
|
177
|
-
console.log('
|
|
175
|
+
//selectByPk by pk not existed
|
|
176
|
+
let sbn = await wo.selectByPk('2024-01-01T00:00:00Z')
|
|
177
|
+
console.log('selectByPk by pk not existed', sbn)
|
|
178
178
|
|
|
179
179
|
//select by $and, $gt, $lt
|
|
180
180
|
let spa = await wo.select({ '$and': [{ value: { '$gt': 123 } }, { value: { '$lt': 200 } }] })
|
|
@@ -334,12 +334,12 @@ test()
|
|
|
334
334
|
// { time: 2025-01-01T00:04:00.000Z, name: 'rosemary', value: 123.1236 },
|
|
335
335
|
// { time: 2025-01-01T00:07:00.000Z, name: 'rosemary', value: 124.76 }
|
|
336
336
|
// ]
|
|
337
|
-
//
|
|
337
|
+
// selectByPk {
|
|
338
338
|
// time: 2025-01-01T00:10:00.000Z,
|
|
339
339
|
// name: 'rosemary(modify)',
|
|
340
340
|
// value: 113.98
|
|
341
341
|
// }
|
|
342
|
-
//
|
|
342
|
+
// selectByPk by pk not existed null
|
|
343
343
|
// select by $and, $gt, $lt [
|
|
344
344
|
// { time: 2025-01-01T00:01:00.000Z, name: 'rosemary', value: 123.456 },
|
|
345
345
|
// { time: 2025-01-01T00:04:00.000Z, name: 'rosemary', value: 123.1236 },
|