w-orm-reladb 1.1.10 → 1.1.11
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 +41 -0
- package/dist/w-orm-reladb.umd.js +2 -2
- package/dist/w-orm-reladb.umd.js.map +1 -1
- package/docs/WOrmReladb.html +24 -16
- package/docs/WOrmReladb.mjs.html +44 -3
- package/docs/cvFind.mjs.html +128 -7
- package/docs/global.html +328 -7
- package/docs/importModels.mjs.html +2 -2
- package/docs/index.html +2 -2
- package/models/tdate.js +38 -0
- package/models/tdatei.js +20 -0
- package/package.json +2 -2
- package/src/WOrmReladb.mjs +42 -1
- package/src/cvFind.mjs +126 -5
- package/test/api-date-write.mjs +467 -0
- package/test/api-mssql.test.mjs +2 -0
- package/test/api-sqlite.test.mjs +2 -0
- package/test/tools/withTz.mjs +43 -0
- package/test/unit-date-write.test.mjs +457 -0
package/docs/global.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="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#genDateChecker">genDateChecker</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#inDateRange">inDateRange</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
33
33
|
|
|
34
34
|
</nav>
|
|
35
35
|
|
|
@@ -150,7 +150,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
150
150
|
|
|
151
151
|
<dt class="tag-source">Source:</dt>
|
|
152
152
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
153
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
153
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line851">line 851</a>
|
|
154
154
|
</li></ul></dd>
|
|
155
155
|
|
|
156
156
|
|
|
@@ -514,6 +514,169 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
514
514
|
|
|
515
515
|
|
|
516
516
|
|
|
517
|
+
<h4 class="name" id="genDateChecker"><span class="type-signature"></span>genDateChecker<span class="signature">(attrs)</span><span class="type-signature"> → {function}</span></h4>
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
<dl class="details">
|
|
525
|
+
|
|
526
|
+
<dt class="tag-description">Description:</dt>
|
|
527
|
+
<dd class="tag-description"><ul class="dummy"><li><p>產生寫入數據之DATE/DATEONLY欄範圍檢核函數(R12): 回傳之函數對單筆數據(物件)檢核各DATE、DATEONLY屬性之值,
|
|
528
|
+
回傳第一個無效或範圍外(年份不在1–9999)之屬性名(依model屬性定義順序), 皆合法回傳null
|
|
529
|
+
註: 與條件側共用inDateRange; 只檢核model中型別為DATE(date)與DATEONLY(dateonly)之屬性, 值為null或undefined者不檢;
|
|
530
|
+
非物件之記錄回傳null(由呼叫端前段檢核負責)
|
|
531
|
+
註: 通過檢核之物件值(Date及其子類別、包裝物件、陣列等)就地換成已檢核之標準值(Date或YYYY-MM-DD文字), 令檢查之值即使用之值(見chkWriteDate);
|
|
532
|
+
僅換記錄自有屬性, 原型鏈上之屬性只讀不換(create與bulkCreate不讀原型鏈屬性, update會讀, 故原型鏈上具狀態之getter不在保證範圍)</p></li></ul></dd>
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
<dt class="tag-source">Source:</dt>
|
|
537
|
+
<dd class="tag-source"><ul class="dummy"><li>
|
|
538
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line415">line 415</a>
|
|
539
|
+
</li></ul></dd>
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
</dl>
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
<h5 class="h5-parameters">Parameters:</h5>
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
<table class="params">
|
|
589
|
+
<thead>
|
|
590
|
+
<tr>
|
|
591
|
+
|
|
592
|
+
<th>Name</th>
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
<th>Type</th>
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
<th class="last">Description</th>
|
|
602
|
+
</tr>
|
|
603
|
+
</thead>
|
|
604
|
+
|
|
605
|
+
<tbody>
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
<tr>
|
|
609
|
+
|
|
610
|
+
<td class="name"><code>attrs</code></td>
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
<td class="type">
|
|
614
|
+
|
|
615
|
+
|
|
616
|
+
<span class="param-type">Object</span>
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
</td>
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
<td class="description last"><p>輸入model之rawAttributes, 非物件時回傳恆為null之檢核函數</p></td>
|
|
628
|
+
</tr>
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
</tbody>
|
|
632
|
+
</table>
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
<h5 class="h5-returns">Returns:</h5>
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
<div class="param-desc">
|
|
653
|
+
<p>回傳檢核函數(rec)=>屬性名字串或null</p>
|
|
654
|
+
</div>
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
<dl class="param-type">
|
|
659
|
+
<dt>
|
|
660
|
+
Type
|
|
661
|
+
</dt>
|
|
662
|
+
<dd>
|
|
663
|
+
|
|
664
|
+
<span class="param-type">function</span>
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
|
|
668
|
+
</dd>
|
|
669
|
+
</dl>
|
|
670
|
+
|
|
671
|
+
|
|
672
|
+
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
|
|
517
680
|
<h4 class="name" id="getColKind"><span class="type-signature"></span>getColKind<span class="signature">(attrs, field)</span><span class="type-signature"> → {String}</span></h4>
|
|
518
681
|
|
|
519
682
|
|
|
@@ -530,7 +693,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
530
693
|
|
|
531
694
|
<dt class="tag-source">Source:</dt>
|
|
532
695
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
533
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
696
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line159">line 159</a>
|
|
534
697
|
</li></ul></dd>
|
|
535
698
|
|
|
536
699
|
|
|
@@ -712,7 +875,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
712
875
|
|
|
713
876
|
<dt class="tag-source">Source:</dt>
|
|
714
877
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
715
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
878
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line454">line 454</a>
|
|
716
879
|
</li></ul></dd>
|
|
717
880
|
|
|
718
881
|
|
|
@@ -1278,6 +1441,164 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
1278
1441
|
|
|
1279
1442
|
|
|
1280
1443
|
|
|
1444
|
+
<h4 class="name" id="inDateRange"><span class="type-signature"></span>inDateRange<span class="signature">(ms)</span><span class="type-signature"> → {Boolean}</span></h4>
|
|
1445
|
+
|
|
1446
|
+
|
|
1447
|
+
|
|
1448
|
+
|
|
1449
|
+
|
|
1450
|
+
|
|
1451
|
+
<dl class="details">
|
|
1452
|
+
|
|
1453
|
+
<dt class="tag-description">Description:</dt>
|
|
1454
|
+
<dd class="tag-description"><ul class="dummy"><li><p>判定時間(毫秒)換算UTC後年份是否在1–9999, 供條件側與寫入側共用(R4、R12); 無效時間(NaN、超出Date範圍)為false</p></li></ul></dd>
|
|
1455
|
+
|
|
1456
|
+
|
|
1457
|
+
|
|
1458
|
+
<dt class="tag-source">Source:</dt>
|
|
1459
|
+
<dd class="tag-source"><ul class="dummy"><li>
|
|
1460
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line341">line 341</a>
|
|
1461
|
+
</li></ul></dd>
|
|
1462
|
+
|
|
1463
|
+
|
|
1464
|
+
|
|
1465
|
+
|
|
1466
|
+
|
|
1467
|
+
|
|
1468
|
+
|
|
1469
|
+
|
|
1470
|
+
|
|
1471
|
+
|
|
1472
|
+
|
|
1473
|
+
|
|
1474
|
+
|
|
1475
|
+
|
|
1476
|
+
|
|
1477
|
+
|
|
1478
|
+
|
|
1479
|
+
|
|
1480
|
+
|
|
1481
|
+
|
|
1482
|
+
|
|
1483
|
+
|
|
1484
|
+
|
|
1485
|
+
|
|
1486
|
+
|
|
1487
|
+
|
|
1488
|
+
|
|
1489
|
+
|
|
1490
|
+
|
|
1491
|
+
|
|
1492
|
+
|
|
1493
|
+
</dl>
|
|
1494
|
+
|
|
1495
|
+
|
|
1496
|
+
|
|
1497
|
+
|
|
1498
|
+
|
|
1499
|
+
|
|
1500
|
+
|
|
1501
|
+
|
|
1502
|
+
|
|
1503
|
+
|
|
1504
|
+
|
|
1505
|
+
|
|
1506
|
+
|
|
1507
|
+
<h5 class="h5-parameters">Parameters:</h5>
|
|
1508
|
+
|
|
1509
|
+
|
|
1510
|
+
<table class="params">
|
|
1511
|
+
<thead>
|
|
1512
|
+
<tr>
|
|
1513
|
+
|
|
1514
|
+
<th>Name</th>
|
|
1515
|
+
|
|
1516
|
+
|
|
1517
|
+
<th>Type</th>
|
|
1518
|
+
|
|
1519
|
+
|
|
1520
|
+
|
|
1521
|
+
|
|
1522
|
+
|
|
1523
|
+
<th class="last">Description</th>
|
|
1524
|
+
</tr>
|
|
1525
|
+
</thead>
|
|
1526
|
+
|
|
1527
|
+
<tbody>
|
|
1528
|
+
|
|
1529
|
+
|
|
1530
|
+
<tr>
|
|
1531
|
+
|
|
1532
|
+
<td class="name"><code>ms</code></td>
|
|
1533
|
+
|
|
1534
|
+
|
|
1535
|
+
<td class="type">
|
|
1536
|
+
|
|
1537
|
+
|
|
1538
|
+
<span class="param-type">Number</span>
|
|
1539
|
+
|
|
1540
|
+
|
|
1541
|
+
|
|
1542
|
+
|
|
1543
|
+
</td>
|
|
1544
|
+
|
|
1545
|
+
|
|
1546
|
+
|
|
1547
|
+
|
|
1548
|
+
|
|
1549
|
+
<td class="description last"><p>輸入時間毫秒數</p></td>
|
|
1550
|
+
</tr>
|
|
1551
|
+
|
|
1552
|
+
|
|
1553
|
+
</tbody>
|
|
1554
|
+
</table>
|
|
1555
|
+
|
|
1556
|
+
|
|
1557
|
+
|
|
1558
|
+
|
|
1559
|
+
|
|
1560
|
+
|
|
1561
|
+
|
|
1562
|
+
|
|
1563
|
+
|
|
1564
|
+
|
|
1565
|
+
|
|
1566
|
+
|
|
1567
|
+
|
|
1568
|
+
|
|
1569
|
+
|
|
1570
|
+
|
|
1571
|
+
<h5 class="h5-returns">Returns:</h5>
|
|
1572
|
+
|
|
1573
|
+
|
|
1574
|
+
<div class="param-desc">
|
|
1575
|
+
<p>回傳是否在範圍內</p>
|
|
1576
|
+
</div>
|
|
1577
|
+
|
|
1578
|
+
|
|
1579
|
+
|
|
1580
|
+
<dl class="param-type">
|
|
1581
|
+
<dt>
|
|
1582
|
+
Type
|
|
1583
|
+
</dt>
|
|
1584
|
+
<dd>
|
|
1585
|
+
|
|
1586
|
+
<span class="param-type">Boolean</span>
|
|
1587
|
+
|
|
1588
|
+
|
|
1589
|
+
|
|
1590
|
+
</dd>
|
|
1591
|
+
</dl>
|
|
1592
|
+
|
|
1593
|
+
|
|
1594
|
+
|
|
1595
|
+
|
|
1596
|
+
|
|
1597
|
+
|
|
1598
|
+
|
|
1599
|
+
|
|
1600
|
+
|
|
1601
|
+
|
|
1281
1602
|
<h4 class="name" id="isKindOk"><span class="type-signature"></span>isKindOk<span class="signature">(v, kind)</span><span class="type-signature"> → {Boolean}</span></h4>
|
|
1282
1603
|
|
|
1283
1604
|
|
|
@@ -1297,7 +1618,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
1297
1618
|
|
|
1298
1619
|
<dt class="tag-source">Source:</dt>
|
|
1299
1620
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
1300
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
1621
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line476">line 476</a>
|
|
1301
1622
|
</li></ul></dd>
|
|
1302
1623
|
|
|
1303
1624
|
|
|
@@ -1488,7 +1809,7 @@ DECIMAL主鍵欄之值小數位多於scale者寫入時會被四捨五入而改
|
|
|
1488
1809
|
|
|
1489
1810
|
<dt class="tag-source">Source:</dt>
|
|
1490
1811
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
1491
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
1812
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line569">line 569</a>
|
|
1492
1813
|
</li></ul></dd>
|
|
1493
1814
|
|
|
1494
1815
|
|
|
@@ -1740,7 +2061,7 @@ DECIMAL主鍵欄之值小數位多於scale者寫入時會被四捨五入而改
|
|
|
1740
2061
|
<br class="clear">
|
|
1741
2062
|
|
|
1742
2063
|
<footer>
|
|
1743
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Oct 19 2026
|
|
2064
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Oct 19 2026 23:23:31 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
1744
2065
|
</footer>
|
|
1745
2066
|
|
|
1746
2067
|
<script>prettyPrint();</script>
|
|
@@ -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="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#genDateChecker">genDateChecker</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#inDateRange">inDateRange</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
33
33
|
|
|
34
34
|
</nav>
|
|
35
35
|
|
|
@@ -242,7 +242,7 @@ export default importModels
|
|
|
242
242
|
<br class="clear">
|
|
243
243
|
|
|
244
244
|
<footer>
|
|
245
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Oct 19 2026
|
|
245
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Oct 19 2026 23:23:31 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
246
246
|
</footer>
|
|
247
247
|
|
|
248
248
|
<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="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#genDateChecker">genDateChecker</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#inDateRange">inDateRange</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></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 Mon Oct 19 2026
|
|
74
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Oct 19 2026 23:23:31 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/models/tdate.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* jshint indent: 1 */
|
|
2
|
+
module.exports = function(sequelize, DataTypes) {
|
|
3
|
+
return sequelize.define('tdate', {
|
|
4
|
+
'id': {
|
|
5
|
+
type: DataTypes.STRING,
|
|
6
|
+
allowNull: false,
|
|
7
|
+
primaryKey: true,
|
|
8
|
+
autoIncrement: false,
|
|
9
|
+
comment: null
|
|
10
|
+
},
|
|
11
|
+
'n': {
|
|
12
|
+
type: DataTypes.STRING,
|
|
13
|
+
allowNull: true,
|
|
14
|
+
autoIncrement: false,
|
|
15
|
+
comment: null
|
|
16
|
+
},
|
|
17
|
+
'd': {
|
|
18
|
+
type: DataTypes.DATE,
|
|
19
|
+
allowNull: true,
|
|
20
|
+
autoIncrement: false,
|
|
21
|
+
comment: null
|
|
22
|
+
},
|
|
23
|
+
'd2': {
|
|
24
|
+
type: DataTypes.DATE,
|
|
25
|
+
allowNull: true,
|
|
26
|
+
autoIncrement: false,
|
|
27
|
+
comment: null
|
|
28
|
+
},
|
|
29
|
+
'o': {
|
|
30
|
+
type: DataTypes.DATEONLY,
|
|
31
|
+
allowNull: true,
|
|
32
|
+
autoIncrement: false,
|
|
33
|
+
comment: null
|
|
34
|
+
}
|
|
35
|
+
}, {
|
|
36
|
+
tableName: 'tdate'
|
|
37
|
+
});
|
|
38
|
+
};
|
package/models/tdatei.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/* jshint indent: 1 */
|
|
2
|
+
module.exports = function(sequelize, DataTypes) {
|
|
3
|
+
return sequelize.define('tdatei', {
|
|
4
|
+
'id': {
|
|
5
|
+
type: DataTypes.INTEGER,
|
|
6
|
+
allowNull: false,
|
|
7
|
+
primaryKey: true,
|
|
8
|
+
autoIncrement: false,
|
|
9
|
+
comment: null
|
|
10
|
+
},
|
|
11
|
+
'd': {
|
|
12
|
+
type: DataTypes.DATE,
|
|
13
|
+
allowNull: true,
|
|
14
|
+
autoIncrement: false,
|
|
15
|
+
comment: null
|
|
16
|
+
}
|
|
17
|
+
}, {
|
|
18
|
+
tableName: 'tdatei'
|
|
19
|
+
});
|
|
20
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "w-orm-reladb",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.11",
|
|
4
4
|
"main": "dist/w-orm-reladb.umd.js",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"json5": "^2.2.3",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"msg": "install sqlcipher fo the protection when db=sqlite"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"w-package-tools": "^1.1.
|
|
17
|
+
"w-package-tools": "^1.1.21"
|
|
18
18
|
},
|
|
19
19
|
"scripts": {
|
|
20
20
|
"test": "mocha --parallel \"test/*.test.mjs\" --timeout 180000",
|
package/src/WOrmReladb.mjs
CHANGED
|
@@ -25,7 +25,7 @@ import pmQueue from 'wsemi/src/pmQueue.mjs'
|
|
|
25
25
|
import WAutoSequelize from 'w-auto-sequelize/src/WAutoSequelize.mjs'
|
|
26
26
|
import importModels from './importModels.mjs'
|
|
27
27
|
import _genModelsByTabs from './genModelsByTabs.mjs'
|
|
28
|
-
import cvFind, { getColKind, getColScale, normPk, chkFindShape } from './cvFind.mjs'
|
|
28
|
+
import cvFind, { getColKind, getColScale, normPk, chkFindShape, genDateChecker } from './cvFind.mjs'
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
//放置於全域宣告, 若使用useStable=true才可於當創建多實例時仍能全域控管
|
|
@@ -382,6 +382,30 @@ function WOrmReladb(opt = {}) {
|
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
|
|
385
|
+
/**
|
|
386
|
+
* 檢核各筆數據之DATE、DATEONLY欄值是否為年份在1–9999之有效時間(見cvFind.mjs之genDateChecker與inDateRange), 範圍外或無效者整批拋出
|
|
387
|
+
* 註: 通過檢核之物件值(Date及其子類別、包裝物件、陣列等)由檢核函數就地換成已檢核之標準值(Date或YYYY-MM-DD文字),令檢查之值即使用之值;操作對象為cloneDeep後之複本,呼叫端數據不變
|
|
388
|
+
* 註: 須於normPks之後、任何寫入之前對全部筆數一次完成, 令拋錯時同批之有效筆數亦不會被寫入, 資料庫不變; 與條件側共用同一範圍判定
|
|
389
|
+
* 註: 訊息只含筆數索引與欄名, 不回顯值; 同筆多欄範圍外者回報model屬性定義順序之第一個, 多筆範圍外者回報索引最小者
|
|
390
|
+
* 註: sqlite以文字存DATE, 範圍外年份之文字與時間序不一致(哨兵new Date(8.64e15)存為275760-09-13…, 被$lt某日期誤中而遭delAll刪除), 故寫入時即拒收;
|
|
391
|
+
* mssql之datetimeoffset、date範圍亦為0001–9999, 本函數於送出前即拒, 不依賴資料庫報錯, 兩方言行為一致
|
|
392
|
+
*
|
|
393
|
+
* @ignore
|
|
394
|
+
* @param {Object} md 輸入資料表model物件
|
|
395
|
+
* @param {Array} data 輸入已補齊並正規化主鍵之數據陣列
|
|
396
|
+
* @returns {undefined} 無回傳值
|
|
397
|
+
*/
|
|
398
|
+
function chkDates(md, data) {
|
|
399
|
+
let chk = genDateChecker(get(md, 'rawAttributes', {}))
|
|
400
|
+
data.forEach((v, k) => {
|
|
401
|
+
let col = chk(v)
|
|
402
|
+
if (col !== null) {
|
|
403
|
+
throw new Error(`invalid data: date is not a valid time in years 1-9999 at [data[${k}].${col}]`)
|
|
404
|
+
}
|
|
405
|
+
})
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
|
|
385
409
|
/**
|
|
386
410
|
* 依model之主鍵欄型別正規化主鍵值
|
|
387
411
|
* 註: 規則見cvFind.mjs之normPk(與w-orm-mdb同一規則), 用於selectByPk、del、save、insert與insertBulk,
|
|
@@ -799,6 +823,10 @@ function WOrmReladb(opt = {}) {
|
|
|
799
823
|
* 註: 同批含重複主鍵時僅首筆計入nInserted,其餘視為已存在
|
|
800
824
|
* 註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
801
825
|
* 註: 主鍵值依主鍵欄型別正規化後寫入(字串類主鍵欄之123存為'123');型別不符(整數類主鍵欄給'012'等)即reject且同批皆不寫入,不以自動產生之主鍵取代
|
|
826
|
+
* 註: DATE、DATEONLY欄之值(Date、epoch數值、日期字串)換算後年份須在1–9999(DATE依UTC,DATEONLY依存入之日期文字),範圍外者(如new Date(8.64e15)、'+010000-01-01T00:00:00Z')即reject且同批皆不寫入,
|
|
827
|
+
* 錯誤訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],不回顯值;sqlite以文字存日期,範圍外年份之文字與時間序不一致,會使以日期為條件之delAll刪錯列,
|
|
828
|
+
* 故兩方言一律於送出前拒收;無效時間(Invalid Date、NaN、無法解析之字串、空字串等,sqlite會存為字典序大於任何年份之文字Invalid date,mssql則由資料庫報錯)亦一併reject;
|
|
829
|
+
* 庫內既有之範圍外日期不遷移,須自行清理或改寫(見README)
|
|
802
830
|
* 註: option.returnList開啟時改回與輸入等長且保序之逐筆結果陣列[{n,nInserted,ok}],
|
|
803
831
|
* 聚合計數只答得出[有幾筆是新的]而答不出[是哪幾筆],而後者正是去重之產出物;
|
|
804
832
|
* 逐筆元素之n與ok恆為1,資訊由nInserted承載,不變式為
|
|
@@ -883,6 +911,9 @@ function WOrmReladb(opt = {}) {
|
|
|
883
911
|
//normPks, 主鍵值依主鍵欄型別正規化後寫回, 型別不符者整批reject且不寫入任何一筆, 令insert對既有數據之認定與selectByPk一致
|
|
884
912
|
normPks(md, data)
|
|
885
913
|
|
|
914
|
+
//chkDates, DATE、DATEONLY欄之值須為年份在1–9999之有效時間, 範圍外或無效者整批reject且不寫入任何一筆(與條件側共用範圍判定, 見R12)
|
|
915
|
+
chkDates(md, data)
|
|
916
|
+
|
|
886
917
|
//nAll, n之基準為輸入筆數
|
|
887
918
|
let nAll = size(data)
|
|
888
919
|
|
|
@@ -976,6 +1007,8 @@ function WOrmReladb(opt = {}) {
|
|
|
976
1007
|
* 註: 不提供逐筆結果,故不出現ok為0與err;需要逐筆處置者改用insert
|
|
977
1008
|
* 註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
978
1009
|
* 註: 主鍵值依主鍵欄型別正規化後寫入(字串類主鍵欄之123存為'123');型別不符(整數類主鍵欄給'012'等)即reject且同批皆不寫入
|
|
1010
|
+
* 註: DATE、DATEONLY欄之值換算後年份須在1–9999,範圍外或無效者(如new Date(8.64e15)、new Date(NaN))即reject且同批皆不寫入,訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],
|
|
1011
|
+
* 不回顯值,兩方言一致於送出前拒收,規則同insert
|
|
979
1012
|
* 註: [全有全無]為獨立於T7之額外要求——T7僅保證每筆之[檢查主鍵不存在]與[寫入]為原子,不保證整批。
|
|
980
1013
|
* mssql因綁定參數數量上限會由驅動層自動拆為多語句送出,實測1000筆之批次於末筆撞主鍵時已有946筆落盤,
|
|
981
1014
|
* 故一律以交易包覆並於失敗時回滾;呼叫端已給transaction時改以巢狀交易(SAVEPOINT)包覆,
|
|
@@ -1053,6 +1086,9 @@ function WOrmReladb(opt = {}) {
|
|
|
1053
1086
|
//normPks, 主鍵值依主鍵欄型別正規化後寫回, 型別不符者整批reject且不寫入任何一筆
|
|
1054
1087
|
normPks(md, data)
|
|
1055
1088
|
|
|
1089
|
+
//chkDates, DATE、DATEONLY欄之值須為年份在1–9999之有效時間, 範圍外或無效者整批reject且不寫入任何一筆(與條件側共用範圍判定, 見R12)
|
|
1090
|
+
chkDates(md, data)
|
|
1091
|
+
|
|
1056
1092
|
//nAll, n之基準為輸入筆數
|
|
1057
1093
|
let nAll = size(data)
|
|
1058
1094
|
|
|
@@ -1312,6 +1348,8 @@ function WOrmReladb(opt = {}) {
|
|
|
1312
1348
|
* 註: 本筆失敗不中斷整批,該筆以ok為0並附err回報
|
|
1313
1349
|
* 註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
1314
1350
|
* 註: 主鍵值依主鍵欄型別正規化(字串類主鍵欄之123即'123');型別不符(整數類主鍵欄給'012'等)屬呼叫端未履行契約,整批reject且同批皆不寫入
|
|
1351
|
+
* 註: DATE、DATEONLY欄之值換算後年份須在1–9999,範圍外或無效者(如new Date(8.64e15)、new Date(NaN))屬呼叫端未履行契約,整批reject且同批皆不寫入(含autoInsert為false而不會寫入者;不降為該筆ok為0),
|
|
1352
|
+
* 訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],不回顯值,兩方言一致於送出前拒收,規則同insert
|
|
1315
1353
|
*
|
|
1316
1354
|
* @memberOf WOrmReladb
|
|
1317
1355
|
* @param {Object|Array} data 輸入數據物件或陣列
|
|
@@ -1385,6 +1423,9 @@ function WOrmReladb(opt = {}) {
|
|
|
1385
1423
|
//normPks, 主鍵值依主鍵欄型別正規化後寫回, 型別不符者整批reject且不寫入任何一筆
|
|
1386
1424
|
normPks(md, data)
|
|
1387
1425
|
|
|
1426
|
+
//chkDates, DATE、DATEONLY欄之值須為年份在1–9999之有效時間, 範圍外或無效者整批reject且不寫入任何一筆(含autoInsert為false而不會寫入者; 與條件側共用範圍判定, 見R12)
|
|
1427
|
+
chkDates(md, data)
|
|
1428
|
+
|
|
1388
1429
|
//ks, model之欄位名, 供合併後比對時濾除非欄位之鍵
|
|
1389
1430
|
let ks = keys(get(md, 'rawAttributes', {}))
|
|
1390
1431
|
|