baja-lite 1.4.3 → 1.4.4

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.
Files changed (3) hide show
  1. package/package.json +1 -1
  2. package/sql.d.ts +68 -8
  3. package/sql.js +68 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "baja-lite",
3
- "version": "1.4.3",
3
+ "version": "1.4.4",
4
4
  "description": "some util for self",
5
5
  "homepage": "https://github.com/void-soul/baja-lite",
6
6
  "repository": {
package/sql.d.ts CHANGED
@@ -1368,232 +1368,281 @@ declare class StreamQuery<T extends object> {
1368
1368
  reset(): this;
1369
1369
  /** 为下次链条执行提供条件判断:非异步方法跳过,异步方法不执行并返回默认值 */
1370
1370
  if(condition: boolean): this;
1371
+ /**
1372
+ * AND(key1 = :value OR key2 = :value)
1373
+ * @param keys [key1, key2, ...]
1374
+ */
1371
1375
  eqs(keys: (keyof T)[], value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1372
1376
  paramName?: string | undefined;
1373
1377
  skipEmptyString?: boolean | undefined;
1374
1378
  breakExcuteIfSkip?: boolean | undefined;
1375
1379
  }): this;
1380
+ /*** AND key = :value */
1376
1381
  eq(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1377
1382
  paramName?: string | undefined;
1378
1383
  skipEmptyString?: boolean | undefined;
1379
1384
  breakExcuteIfSkip?: boolean | undefined;
1380
1385
  }): this;
1386
+ /*** AND key1 = :value1 AND key2 = :value2 */
1381
1387
  eqT(t: Partial<T>, { name: paramName, breakExcuteIfSkip }?: {
1382
1388
  name?: string | undefined;
1383
1389
  breakExcuteIfSkip?: boolean | undefined;
1384
1390
  }): this;
1391
+ /*** AND key <> :value */
1385
1392
  notEq(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1386
1393
  paramName?: string | undefined;
1387
1394
  skipEmptyString?: boolean | undefined;
1388
1395
  breakExcuteIfSkip?: boolean | undefined;
1389
1396
  }): this;
1397
+ /** AND key1 = key2 */
1390
1398
  eqWith(key1: keyof T, key2: keyof T): this;
1399
+ /** AND key1 <> key2 */
1391
1400
  notEqWith(key1: keyof T, key2: keyof T): this;
1401
+ /** AND key REGEXP :regexp */
1392
1402
  regexp(key: keyof T, regexp: string, { paramName, breakExcuteIfSkip }?: {
1393
1403
  paramName?: string | undefined;
1394
1404
  breakExcuteIfSkip?: boolean | undefined;
1395
1405
  }): this;
1406
+ /** AND key NOT REGEXP :regexp */
1396
1407
  notRegexp(key: keyof T, regexp: string, { paramName, breakExcuteIfSkip }?: {
1397
1408
  paramName?: string | undefined;
1398
1409
  breakExcuteIfSkip?: boolean | undefined;
1399
1410
  }): this;
1400
- /** (key1 << 8) + key2 = value */
1411
+ /** AND (key1 << 8) + key2 = value */
1401
1412
  shiftEq(key1: keyof T, key2: keyof T, value: number, { paramName, breakExcuteIfSkip }?: {
1402
1413
  paramName?: string | undefined;
1403
1414
  breakExcuteIfSkip?: boolean | undefined;
1404
1415
  }): this;
1405
- /** (key1 << 8) + key2 <> value */
1416
+ /** AND (key1 << 8) + key2 <> value */
1406
1417
  shiftNotEq(key1: keyof T, key2: keyof T, value: number, { paramName, breakExcuteIfSkip }?: {
1407
1418
  paramName?: string | undefined;
1408
1419
  breakExcuteIfSkip?: boolean | undefined;
1409
1420
  }): this;
1421
+ /** AND key > :value */
1410
1422
  grate(key: keyof T, value: string | number, { paramName, breakExcuteIfSkip }?: {
1411
1423
  paramName?: string | undefined;
1412
1424
  breakExcuteIfSkip?: boolean | undefined;
1413
1425
  }): this;
1426
+ /** AND key >= :value */
1414
1427
  grateEq(key: keyof T, value: string | number, { paramName, breakExcuteIfSkip }?: {
1415
1428
  paramName?: string | undefined;
1416
1429
  breakExcuteIfSkip?: boolean | undefined;
1417
1430
  }): this;
1431
+ /** AND key1 > key2 */
1418
1432
  grateWith(key1: keyof T, key2: keyof T): this;
1433
+ /** AND key1 >= key2 */
1419
1434
  grateEqWith(key1: keyof T, key2: keyof T): this;
1435
+ /** AND key < :value */
1420
1436
  less(key: keyof T, value: string | number, { paramName, breakExcuteIfSkip }?: {
1421
1437
  paramName?: string | undefined;
1422
1438
  breakExcuteIfSkip?: boolean | undefined;
1423
1439
  }): this;
1440
+ /** AND key <= :value */
1424
1441
  lessEq(key: keyof T, value: string | number, { paramName, breakExcuteIfSkip }?: {
1425
1442
  paramName?: string | undefined;
1426
1443
  breakExcuteIfSkip?: boolean | undefined;
1427
1444
  }): this;
1445
+ /** AND key1 < key2 */
1428
1446
  lessWith(key1: keyof T, key2: keyof T): this;
1447
+ /** AND key1 <= key2 */
1429
1448
  lessEqWith(key1: keyof T, key2: keyof T): this;
1449
+ /** AND key LIKE CONCAT('%', :value, '%') */
1430
1450
  like(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1431
1451
  paramName?: string | undefined;
1432
1452
  skipEmptyString?: boolean | undefined;
1433
1453
  breakExcuteIfSkip?: boolean | undefined;
1434
1454
  }): this;
1455
+ /** AND key NOT LIKE CONCAT('%', :value, '%') */
1435
1456
  notLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1436
1457
  paramName?: string | undefined;
1437
1458
  skipEmptyString?: boolean | undefined;
1438
1459
  breakExcuteIfSkip?: boolean | undefined;
1439
1460
  }): this;
1461
+ /** AND key NOT LIKE CONCAT('%', :value) */
1440
1462
  leftLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1441
1463
  paramName?: string | undefined;
1442
1464
  skipEmptyString?: boolean | undefined;
1443
1465
  breakExcuteIfSkip?: boolean | undefined;
1444
1466
  }): this;
1467
+ /** AND key LIKE CONCAT('%', :value) */
1445
1468
  notLeftLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1446
1469
  paramName?: string | undefined;
1447
1470
  skipEmptyString?: boolean | undefined;
1448
1471
  breakExcuteIfSkip?: boolean | undefined;
1449
1472
  }): this;
1473
+ /** AND key LIKE CONCAT(:value, '%') */
1450
1474
  rightLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1451
1475
  paramName?: string | undefined;
1452
1476
  skipEmptyString?: boolean | undefined;
1453
1477
  breakExcuteIfSkip?: boolean | undefined;
1454
1478
  }): this;
1479
+ /** AND key NOT LIKE CONCAT(:value, '%') */
1455
1480
  notRightLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1456
1481
  paramName?: string | undefined;
1457
1482
  skipEmptyString?: boolean | undefined;
1458
1483
  breakExcuteIfSkip?: boolean | undefined;
1459
1484
  }): this;
1485
+ /** AND key NOT LIKE :value */
1460
1486
  PreciseLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1461
1487
  paramName?: string | undefined;
1462
1488
  skipEmptyString?: boolean | undefined;
1463
1489
  breakExcuteIfSkip?: boolean | undefined;
1464
1490
  }): this;
1491
+ /** AND key LIKE :value */
1465
1492
  notPreciseLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1466
1493
  paramName?: string | undefined;
1467
1494
  skipEmptyString?: boolean | undefined;
1468
1495
  breakExcuteIfSkip?: boolean | undefined;
1469
1496
  }): this;
1497
+ /** AND key GLOB CONCAT('%', :value, '%') */
1470
1498
  glob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1471
1499
  paramName?: string | undefined;
1472
1500
  skipEmptyString?: boolean | undefined;
1473
1501
  breakExcuteIfSkip?: boolean | undefined;
1474
1502
  }): this;
1503
+ /** AND key NOT GLOB CONCAT('%', :value, '%') */
1475
1504
  notGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1476
1505
  paramName?: string | undefined;
1477
1506
  skipEmptyString?: boolean | undefined;
1478
1507
  breakExcuteIfSkip?: boolean | undefined;
1479
1508
  }): this;
1509
+ /** AND key GLOB CONCAT('%', :value) */
1480
1510
  leftGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1481
1511
  paramName?: string | undefined;
1482
1512
  skipEmptyString?: boolean | undefined;
1483
1513
  breakExcuteIfSkip?: boolean | undefined;
1484
1514
  }): this;
1515
+ /** AND key NOT GLOB CONCAT('%', :value) */
1485
1516
  notLeftGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1486
1517
  paramName?: string | undefined;
1487
1518
  skipEmptyString?: boolean | undefined;
1488
1519
  breakExcuteIfSkip?: boolean | undefined;
1489
1520
  }): this;
1521
+ /** AND key GLOB CONCAT(:value, '%') */
1490
1522
  rightGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1491
1523
  paramName?: string | undefined;
1492
1524
  skipEmptyString?: boolean | undefined;
1493
1525
  breakExcuteIfSkip?: boolean | undefined;
1494
1526
  }): this;
1527
+ /** AND key NOT GLOB CONCAT(:value, '%') */
1495
1528
  notRightGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1496
1529
  paramName?: string | undefined;
1497
1530
  skipEmptyString?: boolean | undefined;
1498
1531
  breakExcuteIfSkip?: boolean | undefined;
1499
1532
  }): this;
1533
+ /** AND key GLOB :value */
1500
1534
  PreciseGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1501
1535
  paramName?: string | undefined;
1502
1536
  skipEmptyString?: boolean | undefined;
1503
1537
  breakExcuteIfSkip?: boolean | undefined;
1504
1538
  }): this;
1539
+ /** AND key NOT GLOB :value */
1505
1540
  notPreciseGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1506
1541
  paramName?: string | undefined;
1507
1542
  skipEmptyString?: boolean | undefined;
1508
1543
  breakExcuteIfSkip?: boolean | undefined;
1509
1544
  }): this;
1545
+ /** AND key IN :value */
1510
1546
  in(key: keyof T, value: Array<string | number>, { paramName, breakExcuteIfSkip }?: {
1511
1547
  paramName?: string | undefined;
1512
1548
  breakExcuteIfSkip?: boolean | undefined;
1513
1549
  }): this;
1550
+ /** AND key NOT IN :value */
1514
1551
  notIn(key: keyof T, value: Array<string | number>, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1515
1552
  paramName?: string | undefined;
1516
1553
  skipEmptyString?: boolean | undefined;
1517
1554
  breakExcuteIfSkip?: boolean | undefined;
1518
1555
  }): this;
1556
+ /** AND :value IN (key1, key2, ...) */
1519
1557
  in2(key: (keyof T)[], value: string | number, { paramName, breakExcuteIfSkip }?: {
1520
1558
  paramName?: string | undefined;
1521
1559
  breakExcuteIfSkip?: boolean | undefined;
1522
1560
  }): this;
1561
+ /** AND :value NOT IN (key1, key2, ...) */
1523
1562
  notIn2(key: (keyof T)[], value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1524
1563
  paramName?: string | undefined;
1525
1564
  skipEmptyString?: boolean | undefined;
1526
1565
  breakExcuteIfSkip?: boolean | undefined;
1527
1566
  }): this;
1567
+ /** AND key IS NULL */
1528
1568
  isNULL(key: keyof T): this;
1569
+ /** AND key IS NOT NULL */
1529
1570
  isNotNULL(key: keyof T): this;
1571
+ /** AND key BETWEEN :value1 AND :value2 */
1530
1572
  between(key: keyof T, value1: string | number, value2: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1531
1573
  paramName?: string | undefined;
1532
1574
  skipEmptyString?: boolean | undefined;
1533
1575
  breakExcuteIfSkip?: boolean | undefined;
1534
1576
  }): this;
1577
+ /** AND key NOT BETWEEN :value1 AND :value2 */
1535
1578
  notBetween(key: keyof T, value1: string | number, value2: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1536
1579
  paramName?: string | undefined;
1537
1580
  skipEmptyString?: boolean | undefined;
1538
1581
  breakExcuteIfSkip?: boolean | undefined;
1539
1582
  }): this;
1583
+ /** AND POW(2, key) & :value */
1540
1584
  pow(key: keyof T, value: number, { paramName, breakExcuteIfSkip }?: {
1541
1585
  paramName?: string | undefined;
1542
1586
  breakExcuteIfSkip?: boolean | undefined;
1543
1587
  }): this;
1588
+ /** AND NOT POW(2, key) & :value */
1544
1589
  notPow(key: keyof T, value: number, { paramName, breakExcuteIfSkip }?: {
1545
1590
  paramName?: string | undefined;
1546
1591
  breakExcuteIfSkip?: boolean | undefined;
1547
1592
  }): this;
1593
+ /** AND POW(2, key1) & key2 */
1548
1594
  powWith(key: keyof T, values: Array<number | string>, { paramName, breakExcuteIfSkip }?: {
1549
1595
  paramName?: string | undefined;
1550
1596
  breakExcuteIfSkip?: boolean | undefined;
1551
1597
  }): this;
1598
+ /** AND NOT POW(2, key1) & key2 */
1552
1599
  notPowWith(key: keyof T, values: Array<number | string>, { paramName, breakExcuteIfSkip }?: {
1553
1600
  paramName?: string | undefined;
1554
1601
  breakExcuteIfSkip?: boolean | undefined;
1555
1602
  }): this;
1556
- /** MATCH(key1, key2, key3) AGAINST (value) */
1603
+ /** AND MATCH(key1, key2, key3) AGAINST (:value) */
1557
1604
  match(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1558
1605
  paramName?: string | undefined;
1559
1606
  skipEmptyString?: boolean | undefined;
1560
1607
  breakExcuteIfSkip?: boolean | undefined;
1561
1608
  }): this;
1562
- /** NOT MATCH(key1, key2, key3) AGAINST (value) */
1609
+ /** AND NOT MATCH(key1, key2, key3) AGAINST (:value) */
1563
1610
  notMatch(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1564
1611
  paramName?: string | undefined;
1565
1612
  skipEmptyString?: boolean | undefined;
1566
1613
  breakExcuteIfSkip?: boolean | undefined;
1567
1614
  }): this;
1568
- /** MATCH(key1, key2, key3) AGAINST (value) IN BOOLEAN MODE*/
1615
+ /** AND MATCH(key1, key2, key3) AGAINST (:value) IN BOOLEAN MODE*/
1569
1616
  matchBoolean(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1570
1617
  paramName?: string | undefined;
1571
1618
  skipEmptyString?: boolean | undefined;
1572
1619
  breakExcuteIfSkip?: boolean | undefined;
1573
1620
  }): this;
1574
- /** NOT MATCH(key1, key2, key3) AGAINST (value) IN BOOLEAN MODE */
1621
+ /** AND NOT MATCH(key1, key2, key3) AGAINST (:value) IN BOOLEAN MODE */
1575
1622
  notMatchBoolean(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1576
1623
  paramName?: string | undefined;
1577
1624
  skipEmptyString?: boolean | undefined;
1578
1625
  breakExcuteIfSkip?: boolean | undefined;
1579
1626
  }): this;
1580
- /** MATCH(key1, key2, key3) AGAINST (value) WITH QUERY EXPANSION*/
1627
+ /** AND MATCH(key1, key2, key3) AGAINST (:value) WITH QUERY EXPANSION*/
1581
1628
  matchQuery(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1582
1629
  paramName?: string | undefined;
1583
1630
  skipEmptyString?: boolean | undefined;
1584
1631
  breakExcuteIfSkip?: boolean | undefined;
1585
1632
  }): this;
1586
- /** NOT MATCH(key1, key2, key3) AGAINST (value) WITH QUERY EXPANSION*/
1633
+ /** AND NOT MATCH(key1, key2, key3) AGAINST (:value) WITH QUERY EXPANSION*/
1587
1634
  notMatchQuery(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1588
1635
  paramName?: string | undefined;
1589
1636
  skipEmptyString?: boolean | undefined;
1590
1637
  breakExcuteIfSkip?: boolean | undefined;
1591
1638
  }): this;
1639
+ /** AND NOT LOCATE(key, :value) > 0 */
1592
1640
  includes(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1593
1641
  paramName?: string | undefined;
1594
1642
  skipEmptyString?: boolean | undefined;
1595
1643
  breakExcuteIfSkip?: boolean | undefined;
1596
1644
  }): this;
1645
+ /** AND NOT LOCATE(key, :value) = 0 */
1597
1646
  notIncludes(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfSkip }?: {
1598
1647
  paramName?: string | undefined;
1599
1648
  skipEmptyString?: boolean | undefined;
@@ -1601,22 +1650,33 @@ declare class StreamQuery<T extends object> {
1601
1650
  }): this;
1602
1651
  and(fn: StreamQuery<T> | ((stream: StreamQuery<T>) => boolean | void)): this;
1603
1652
  or(fn: StreamQuery<T> | ((stream: StreamQuery<T>) => boolean | void)): this;
1653
+ /** SET key = IFNULL(key, 0) + :value */
1604
1654
  incr(key: keyof T, value?: number): this;
1655
+ /** GROUP BY key1, key2, ... */
1605
1656
  groupBy(...keys: (keyof T)[]): this;
1657
+ /** GROUP BY key1, key2, ... */
1606
1658
  groupBy2(...keys: string[]): this;
1659
+ /** ORDER BY key1 ASC, key2 ASC, ... */
1607
1660
  asc(...keys: (keyof T)[]): this;
1661
+ /** ORDER BY key1 ASC, key2 ASC, ... */
1608
1662
  asc2(...keys: string[]): this;
1663
+ /** ORDER BY key1 DESC, key2 DESC, ... */
1609
1664
  desc(...keys: (keyof T)[]): this;
1665
+ /** ORDER BY key1 DESC, key2 DESC, ... */
1610
1666
  desc2(...keys: string[]): this;
1667
+ /** LIMIT :startRow, :pageSize */
1611
1668
  limit(startRow: number, pageSize: number): this;
1669
+ /** LIMIT ((:pageNumber || 1) - 1) * :pageSize, :pageSize */
1612
1670
  page(pageNumber: number, pageSize: number): this;
1613
1671
  distinct(on?: boolean): this;
1672
+ /** COUNT(DISTINCT key) */
1614
1673
  countDistinct(key: keyof T, countName?: string): this;
1615
1674
  count(countName?: string): this;
1616
1675
  sum(key: keyof T, legName?: string, distinct?: boolean): this;
1617
1676
  avg(key: keyof T, legName?: string, distinct?: boolean): this;
1618
1677
  max(key: keyof T, legName?: string, distinct?: boolean): this;
1619
1678
  min(key: keyof T, legName?: string, distinct?: boolean): this;
1679
+ /** GROUP_CONCAT([DISTINCT] key [ORDER BY :asc ASC] [ORDER BY :asc DESC] [SEPARATOR :separator]) */
1620
1680
  groupConcat(key: keyof T, param?: {
1621
1681
  distinct?: boolean;
1622
1682
  separator?: string;
package/sql.js CHANGED
@@ -3422,8 +3422,14 @@ class StreamQuery {
3422
3422
  this.if_proceed = condition;
3423
3423
  return this;
3424
3424
  }
3425
+ /**
3426
+ * AND(key1 = :value OR key2 = :value)
3427
+ * @param keys [key1, key2, ...]
3428
+ */
3425
3429
  eqs(keys, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this.__(keys, value, '=', { paramName, skipEmptyString, breakExcuteIfSkip }); }
3430
+ /*** AND key = :value */
3426
3431
  eq(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._(key, value, '=', { paramName, skipEmptyString, breakExcuteIfSkip }); }
3432
+ /*** AND key1 = :value1 AND key2 = :value2 */
3427
3433
  eqT(t, { name: paramName = '', breakExcuteIfSkip = false } = {}) {
3428
3434
  let exe = false;
3429
3435
  if (t) {
@@ -3461,64 +3467,107 @@ class StreamQuery {
3461
3467
  }
3462
3468
  return this;
3463
3469
  }
3470
+ /*** AND key <> :value */
3464
3471
  notEq(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._(key, value, '<>', { paramName, skipEmptyString, breakExcuteIfSkip }); }
3472
+ /** AND key1 = key2 */
3465
3473
  eqWith(key1, key2) { return this._key(key1, key2, '='); }
3474
+ /** AND key1 <> key2 */
3466
3475
  notEqWith(key1, key2) { return this._key(key1, key2, '<>'); }
3476
+ /** AND key REGEXP :regexp */
3467
3477
  regexp(key, regexp, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._(key, regexp, 'REGEXP', { paramName, skipEmptyString: true, breakExcuteIfSkip }); }
3478
+ /** AND key NOT REGEXP :regexp */
3468
3479
  notRegexp(key, regexp, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._(key, regexp, 'REGEXP', { paramName, skipEmptyString: true, not: 'NOT', breakExcuteIfSkip }); }
3469
- /** (key1 << 8) + key2 = value */
3480
+ /** AND (key1 << 8) + key2 = value */
3470
3481
  shiftEq(key1, key2, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._shift(key1, key2, value, '=', { paramName, breakExcuteIfSkip }); }
3471
- /** (key1 << 8) + key2 <> value */
3482
+ /** AND (key1 << 8) + key2 <> value */
3472
3483
  shiftNotEq(key1, key2, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._shift(key1, key2, value, '<>', { paramName, breakExcuteIfSkip }); }
3484
+ /** AND key > :value */
3473
3485
  grate(key, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._(key, value, '>', { paramName, skipEmptyString: true, breakExcuteIfSkip }); }
3486
+ /** AND key >= :value */
3474
3487
  grateEq(key, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._(key, value, '>=', { paramName, skipEmptyString: true, breakExcuteIfSkip }); }
3488
+ /** AND key1 > key2 */
3475
3489
  grateWith(key1, key2) { return this._key(key1, key2, '>'); }
3490
+ /** AND key1 >= key2 */
3476
3491
  grateEqWith(key1, key2) { return this._key(key1, key2, '>='); }
3492
+ /** AND key < :value */
3477
3493
  less(key, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._(key, value, '<', { paramName, skipEmptyString: true, breakExcuteIfSkip }); }
3494
+ /** AND key <= :value */
3478
3495
  lessEq(key, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._(key, value, '<=', { paramName, skipEmptyString: true, breakExcuteIfSkip }); }
3496
+ /** AND key1 < key2 */
3479
3497
  lessWith(key1, key2) { return this._key(key1, key2, '<'); }
3498
+ /** AND key1 <= key2 */
3480
3499
  lessEqWith(key1, key2) { return this._key(key1, key2, '<='); }
3500
+ /** AND key LIKE CONCAT('%', :value, '%') */
3481
3501
  like(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, left: '%', right: '%', breakExcuteIfSkip }); }
3502
+ /** AND key NOT LIKE CONCAT('%', :value, '%') */
3482
3503
  notLike(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, left: '%', right: '%', not: 'NOT', breakExcuteIfSkip }); }
3504
+ /** AND key NOT LIKE CONCAT('%', :value) */
3483
3505
  leftLike(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, left: '%', breakExcuteIfSkip }); }
3506
+ /** AND key LIKE CONCAT('%', :value) */
3484
3507
  notLeftLike(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, left: '%', not: 'NOT', breakExcuteIfSkip }); }
3508
+ /** AND key LIKE CONCAT(:value, '%') */
3485
3509
  rightLike(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, right: '%', breakExcuteIfSkip }); }
3510
+ /** AND key NOT LIKE CONCAT(:value, '%') */
3486
3511
  notRightLike(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, right: '%', not: 'NOT', breakExcuteIfSkip }); }
3512
+ /** AND key NOT LIKE :value */
3487
3513
  PreciseLike(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, breakExcuteIfSkip }); }
3514
+ /** AND key LIKE :value */
3488
3515
  notPreciseLike(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, not: 'NOT', breakExcuteIfSkip }); }
3516
+ /** AND key GLOB CONCAT('%', :value, '%') */
3489
3517
  glob(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, left: '%', right: '%', breakExcuteIfSkip, op: 'GLOB' }); }
3518
+ /** AND key NOT GLOB CONCAT('%', :value, '%') */
3490
3519
  notGlob(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, left: '%', right: '%', not: 'NOT', breakExcuteIfSkip, op: 'GLOB' }); }
3520
+ /** AND key GLOB CONCAT('%', :value) */
3491
3521
  leftGlob(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, left: '%', breakExcuteIfSkip, op: 'GLOB' }); }
3522
+ /** AND key NOT GLOB CONCAT('%', :value) */
3492
3523
  notLeftGlob(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, left: '%', not: 'NOT', breakExcuteIfSkip, op: 'GLOB' }); }
3524
+ /** AND key GLOB CONCAT(:value, '%') */
3493
3525
  rightGlob(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, right: '%', breakExcuteIfSkip, op: 'GLOB' }); }
3526
+ /** AND key NOT GLOB CONCAT(:value, '%') */
3494
3527
  notRightGlob(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, right: '%', not: 'NOT', breakExcuteIfSkip, op: 'GLOB' }); }
3528
+ /** AND key GLOB :value */
3495
3529
  PreciseGlob(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, breakExcuteIfSkip, op: 'GLOB' }); }
3530
+ /** AND key NOT GLOB :value */
3496
3531
  notPreciseGlob(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._like(key, value, { paramName, skipEmptyString, not: 'NOT', breakExcuteIfSkip, op: 'GLOB' }); }
3532
+ /** AND key IN :value */
3497
3533
  in(key, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._in(key, value, { paramName, breakExcuteIfSkip }); }
3534
+ /** AND key NOT IN :value */
3498
3535
  notIn(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._in(key, value, { paramName, skipEmptyString, not: 'NOT', breakExcuteIfSkip }); }
3536
+ /** AND :value IN (key1, key2, ...) */
3499
3537
  in2(key, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._in2(key, value, { paramName, breakExcuteIfSkip }); }
3538
+ /** AND :value NOT IN (key1, key2, ...) */
3500
3539
  notIn2(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._in2(key, value, { paramName, skipEmptyString, not: 'NOT', breakExcuteIfSkip }); }
3540
+ /** AND key IS NULL */
3501
3541
  isNULL(key) { return this._null(key); }
3542
+ /** AND key IS NOT NULL */
3502
3543
  isNotNULL(key) { return this._null(key, 'NOT'); }
3544
+ /** AND key BETWEEN :value1 AND :value2 */
3503
3545
  between(key, value1, value2, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._between(key, value1, value2, { paramName, skipEmptyString, breakExcuteIfSkip }); }
3546
+ /** AND key NOT BETWEEN :value1 AND :value2 */
3504
3547
  notBetween(key, value1, value2, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._between(key, value1, value2, { paramName, skipEmptyString, not: 'NOT', breakExcuteIfSkip }); }
3548
+ /** AND POW(2, key) & :value */
3505
3549
  pow(key, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._pow(key, value, { paramName, breakExcuteIfSkip }); }
3550
+ /** AND NOT POW(2, key) & :value */
3506
3551
  notPow(key, value, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._pow(key, value, { paramName, not: 'NOT', breakExcuteIfSkip }); }
3552
+ /** AND POW(2, key1) & key2 */
3507
3553
  powWith(key, values, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._pow(key, add(...values.map(value => Math.pow(2, +value))), { paramName, breakExcuteIfSkip }); }
3554
+ /** AND NOT POW(2, key1) & key2 */
3508
3555
  notPowWith(key, values, { paramName = '', breakExcuteIfSkip = false } = {}) { return this._pow(key, add(...values.map(value => Math.pow(2, +value))), { paramName, not: 'NOT', breakExcuteIfSkip }); }
3509
- /** MATCH(key1, key2, key3) AGAINST (value) */
3556
+ /** AND MATCH(key1, key2, key3) AGAINST (:value) */
3510
3557
  match(value, keys, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._match(value, keys, { paramName, skipEmptyString, breakExcuteIfSkip }); }
3511
- /** NOT MATCH(key1, key2, key3) AGAINST (value) */
3558
+ /** AND NOT MATCH(key1, key2, key3) AGAINST (:value) */
3512
3559
  notMatch(value, keys, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._match(value, keys, { paramName, skipEmptyString, not: 'NOT', breakExcuteIfSkip }); }
3513
- /** MATCH(key1, key2, key3) AGAINST (value) IN BOOLEAN MODE*/
3560
+ /** AND MATCH(key1, key2, key3) AGAINST (:value) IN BOOLEAN MODE*/
3514
3561
  matchBoolean(value, keys, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._match(value, keys, { paramName, skipEmptyString, breakExcuteIfSkip, append: 'IN BOOLEAN MODE' }); }
3515
- /** NOT MATCH(key1, key2, key3) AGAINST (value) IN BOOLEAN MODE */
3562
+ /** AND NOT MATCH(key1, key2, key3) AGAINST (:value) IN BOOLEAN MODE */
3516
3563
  notMatchBoolean(value, keys, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._match(value, keys, { paramName, skipEmptyString, breakExcuteIfSkip, not: 'NOT', append: 'IN BOOLEAN MODE' }); }
3517
- /** MATCH(key1, key2, key3) AGAINST (value) WITH QUERY EXPANSION*/
3564
+ /** AND MATCH(key1, key2, key3) AGAINST (:value) WITH QUERY EXPANSION*/
3518
3565
  matchQuery(value, keys, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._match(value, keys, { paramName, skipEmptyString, breakExcuteIfSkip, append: 'WITH QUERY EXPANSION' }); }
3519
- /** NOT MATCH(key1, key2, key3) AGAINST (value) WITH QUERY EXPANSION*/
3566
+ /** AND NOT MATCH(key1, key2, key3) AGAINST (:value) WITH QUERY EXPANSION*/
3520
3567
  notMatchQuery(value, keys, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._match(value, keys, { paramName, skipEmptyString, breakExcuteIfSkip, not: 'NOT', append: 'WITH QUERY EXPANSION' }); }
3568
+ /** AND NOT LOCATE(key, :value) > 0 */
3521
3569
  includes(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._includes(key, value, { paramName, skipEmptyString, breakExcuteIfSkip }); }
3570
+ /** AND NOT LOCATE(key, :value) = 0 */
3522
3571
  notIncludes(key, value, { paramName = '', skipEmptyString = true, breakExcuteIfSkip = false } = {}) { return this._includes(key, value, { paramName, skipEmptyString, not: 'NOT', breakExcuteIfSkip }); }
3523
3572
  and(fn) {
3524
3573
  if (fn instanceof StreamQuery) {
@@ -3546,6 +3595,7 @@ class StreamQuery {
3546
3595
  }
3547
3596
  return this;
3548
3597
  }
3598
+ /** SET key = IFNULL(key, 0) + :value */
3549
3599
  incr(key, value = 1) {
3550
3600
  const pkey = `p${this._prefix}${this._index++}`;
3551
3601
  const keyName = this[_fields][String(key)]?.C2();
@@ -3553,21 +3603,31 @@ class StreamQuery {
3553
3603
  this._param[pkey] = value;
3554
3604
  return this;
3555
3605
  }
3606
+ /** GROUP BY key1, key2, ... */
3556
3607
  groupBy(...keys) { this._groups.push(...keys.map(key => `${this[_fields][String(key)]?.C2()}`)); return this; }
3608
+ /** GROUP BY key1, key2, ... */
3557
3609
  groupBy2(...keys) { this._groups.push(...keys.map(key => `${this[_fields][String(key)]?.C2()}`)); return this; }
3610
+ /** ORDER BY key1 ASC, key2 ASC, ... */
3558
3611
  asc(...keys) { this._orders.push(...keys.map(key => `${this[_fields][String(key)]?.C2()} ASC`)); return this; }
3612
+ /** ORDER BY key1 ASC, key2 ASC, ... */
3559
3613
  asc2(...keys) { this._orders.push(...keys.map(key => `${this[_fields][String(key)]?.C2()} ASC`)); return this; }
3614
+ /** ORDER BY key1 DESC, key2 DESC, ... */
3560
3615
  desc(...keys) { this._orders.push(...keys.map(key => `${this[_fields][String(key)]?.C2()} DESC`)); return this; }
3616
+ /** ORDER BY key1 DESC, key2 DESC, ... */
3561
3617
  desc2(...keys) { this._orders.push(...keys.map(key => `${this[_fields][String(key)]?.C2()} ASC`)); return this; }
3618
+ /** LIMIT :startRow, :pageSize */
3562
3619
  limit(startRow, pageSize) { this._startRow = startRow; this._pageSize = pageSize; return this; }
3620
+ /** LIMIT ((:pageNumber || 1) - 1) * :pageSize, :pageSize */
3563
3621
  page(pageNumber, pageSize) { this._startRow = ((pageNumber || 1) - 1) * pageSize; this._pageSize = pageSize; return this; }
3564
3622
  distinct(on = true) { this._distinct = on; return this; }
3623
+ /** COUNT(DISTINCT key) */
3565
3624
  countDistinct(key, countName) { this._columns.push(`COUNT(DISTINCT ${this[_fields][String(key)]?.C2()}) ${countName || `${this[_fields][String(key)]?.C2()}`}`); return this; }
3566
3625
  count(countName) { this._columns.push(`COUNT(1) ${countName ?? 'ct'}`); return this; }
3567
3626
  sum(key, legName, distinct) { this._columns.push(`SUM(${distinct ? 'DISTINCT' : ''} ${this[_fields][String(key)]?.C2()}) ${legName || `${this[_fields][String(key)]?.C2()}`}`); return this; }
3568
3627
  avg(key, legName, distinct) { this._columns.push(`AVG(${distinct ? 'DISTINCT' : ''} ${this[_fields][String(key)]?.C2()}) ${legName || `${this[_fields][String(key)]?.C2()}`}`); return this; }
3569
3628
  max(key, legName, distinct) { this._columns.push(`MAX(${distinct ? 'DISTINCT' : ''} ${this[_fields][String(key)]?.C2()}) ${legName || `${this[_fields][String(key)]?.C2()}`}`); return this; }
3570
3629
  min(key, legName, distinct) { this._columns.push(`MIN(${distinct ? 'DISTINCT' : ''} ${this[_fields][String(key)]?.C2()}) ${legName || `${this[_fields][String(key)]?.C2()}`}`); return this; }
3630
+ /** GROUP_CONCAT([DISTINCT] key [ORDER BY :asc ASC] [ORDER BY :asc DESC] [SEPARATOR :separator]) */
3571
3631
  groupConcat(key, param) {
3572
3632
  this._columns.push(`GROUP_CONCAT(
3573
3633
  ${param && param.distinct ? 'DISTINCT' : ''} ${this[_fields][String(key)]?.C2()}