@terascope/data-mate 2.23.1 → 2.25.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/bin/duckdb-extensions.js +8 -0
- package/dist/src/adapters/index.d.ts +1 -0
- package/dist/src/adapters/index.d.ts.map +1 -1
- package/dist/src/adapters/index.js +1 -0
- package/dist/src/adapters/index.js.map +1 -1
- package/dist/src/adapters/teal-frame-adapter/index.d.ts +62 -0
- package/dist/src/adapters/teal-frame-adapter/index.d.ts.map +1 -0
- package/dist/src/adapters/teal-frame-adapter/index.js +427 -0
- package/dist/src/adapters/teal-frame-adapter/index.js.map +1 -0
- package/dist/src/core/utils.d.ts +1 -1
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/function-configs/boolean/isBoolean.d.ts.map +1 -1
- package/dist/src/function-configs/boolean/isBoolean.js +11 -0
- package/dist/src/function-configs/boolean/isBoolean.js.map +1 -1
- package/dist/src/function-configs/boolean/isBooleanLike.d.ts.map +1 -1
- package/dist/src/function-configs/boolean/isBooleanLike.js +21 -0
- package/dist/src/function-configs/boolean/isBooleanLike.js.map +1 -1
- package/dist/src/function-configs/boolean/sql-utils.d.ts +31 -0
- package/dist/src/function-configs/boolean/sql-utils.d.ts.map +1 -0
- package/dist/src/function-configs/boolean/sql-utils.js +52 -0
- package/dist/src/function-configs/boolean/sql-utils.js.map +1 -0
- package/dist/src/function-configs/boolean/toBoolean.d.ts.map +1 -1
- package/dist/src/function-configs/boolean/toBoolean.js +20 -0
- package/dist/src/function-configs/boolean/toBoolean.js.map +1 -1
- package/dist/src/function-configs/date/addToDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/addToDate.js +13 -0
- package/dist/src/function-configs/date/addToDate.js.map +1 -1
- package/dist/src/function-configs/date/formatDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/formatDate.js +29 -0
- package/dist/src/function-configs/date/formatDate.js.map +1 -1
- package/dist/src/function-configs/date/getDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/getDate.js +13 -0
- package/dist/src/function-configs/date/getDate.js.map +1 -1
- package/dist/src/function-configs/date/getHours.d.ts.map +1 -1
- package/dist/src/function-configs/date/getHours.js +13 -0
- package/dist/src/function-configs/date/getHours.js.map +1 -1
- package/dist/src/function-configs/date/getMilliseconds.d.ts.map +1 -1
- package/dist/src/function-configs/date/getMilliseconds.js +16 -0
- package/dist/src/function-configs/date/getMilliseconds.js.map +1 -1
- package/dist/src/function-configs/date/getMinutes.d.ts.map +1 -1
- package/dist/src/function-configs/date/getMinutes.js +13 -0
- package/dist/src/function-configs/date/getMinutes.js.map +1 -1
- package/dist/src/function-configs/date/getMonth.d.ts.map +1 -1
- package/dist/src/function-configs/date/getMonth.js +16 -0
- package/dist/src/function-configs/date/getMonth.js.map +1 -1
- package/dist/src/function-configs/date/getSeconds.d.ts.map +1 -1
- package/dist/src/function-configs/date/getSeconds.js +13 -0
- package/dist/src/function-configs/date/getSeconds.js.map +1 -1
- package/dist/src/function-configs/date/getTimeBetween.d.ts.map +1 -1
- package/dist/src/function-configs/date/getTimeBetween.js +13 -0
- package/dist/src/function-configs/date/getTimeBetween.js.map +1 -1
- package/dist/src/function-configs/date/getTimezoneOffset.d.ts.map +1 -1
- package/dist/src/function-configs/date/getTimezoneOffset.js +12 -0
- package/dist/src/function-configs/date/getTimezoneOffset.js.map +1 -1
- package/dist/src/function-configs/date/getUTCDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/getUTCDate.js +14 -0
- package/dist/src/function-configs/date/getUTCDate.js.map +1 -1
- package/dist/src/function-configs/date/getUTCHours.d.ts.map +1 -1
- package/dist/src/function-configs/date/getUTCHours.js +14 -0
- package/dist/src/function-configs/date/getUTCHours.js.map +1 -1
- package/dist/src/function-configs/date/getUTCMinutes.d.ts.map +1 -1
- package/dist/src/function-configs/date/getUTCMinutes.js +14 -0
- package/dist/src/function-configs/date/getUTCMinutes.js.map +1 -1
- package/dist/src/function-configs/date/getUTCMonth.d.ts.map +1 -1
- package/dist/src/function-configs/date/getUTCMonth.js +16 -0
- package/dist/src/function-configs/date/getUTCMonth.js.map +1 -1
- package/dist/src/function-configs/date/getUTCYear.d.ts.map +1 -1
- package/dist/src/function-configs/date/getUTCYear.js +14 -0
- package/dist/src/function-configs/date/getUTCYear.js.map +1 -1
- package/dist/src/function-configs/date/getYear.d.ts.map +1 -1
- package/dist/src/function-configs/date/getYear.js +13 -0
- package/dist/src/function-configs/date/getYear.js.map +1 -1
- package/dist/src/function-configs/date/isAfter.d.ts.map +1 -1
- package/dist/src/function-configs/date/isAfter.js +9 -0
- package/dist/src/function-configs/date/isAfter.js.map +1 -1
- package/dist/src/function-configs/date/isBefore.d.ts.map +1 -1
- package/dist/src/function-configs/date/isBefore.js +7 -0
- package/dist/src/function-configs/date/isBefore.js.map +1 -1
- package/dist/src/function-configs/date/isBetween.d.ts.map +1 -1
- package/dist/src/function-configs/date/isBetween.js +11 -0
- package/dist/src/function-configs/date/isBetween.js.map +1 -1
- package/dist/src/function-configs/date/isDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/isDate.js +11 -0
- package/dist/src/function-configs/date/isDate.js.map +1 -1
- package/dist/src/function-configs/date/isEpoch.d.ts.map +1 -1
- package/dist/src/function-configs/date/isEpoch.js +12 -0
- package/dist/src/function-configs/date/isEpoch.js.map +1 -1
- package/dist/src/function-configs/date/isEpochMillis.d.ts.map +1 -1
- package/dist/src/function-configs/date/isEpochMillis.js +6 -0
- package/dist/src/function-configs/date/isEpochMillis.js.map +1 -1
- package/dist/src/function-configs/date/isFriday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isFriday.js +11 -0
- package/dist/src/function-configs/date/isFriday.js.map +1 -1
- package/dist/src/function-configs/date/isFuture.d.ts.map +1 -1
- package/dist/src/function-configs/date/isFuture.js +11 -0
- package/dist/src/function-configs/date/isFuture.js.map +1 -1
- package/dist/src/function-configs/date/isISO8601.d.ts.map +1 -1
- package/dist/src/function-configs/date/isISO8601.js +9 -0
- package/dist/src/function-configs/date/isISO8601.js.map +1 -1
- package/dist/src/function-configs/date/isLeapYear.d.ts.map +1 -1
- package/dist/src/function-configs/date/isLeapYear.js +13 -0
- package/dist/src/function-configs/date/isLeapYear.js.map +1 -1
- package/dist/src/function-configs/date/isMonday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isMonday.js +11 -0
- package/dist/src/function-configs/date/isMonday.js.map +1 -1
- package/dist/src/function-configs/date/isPast.d.ts.map +1 -1
- package/dist/src/function-configs/date/isPast.js +11 -0
- package/dist/src/function-configs/date/isPast.js.map +1 -1
- package/dist/src/function-configs/date/isSaturday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isSaturday.js +11 -0
- package/dist/src/function-configs/date/isSaturday.js.map +1 -1
- package/dist/src/function-configs/date/isSunday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isSunday.js +11 -0
- package/dist/src/function-configs/date/isSunday.js.map +1 -1
- package/dist/src/function-configs/date/isThursday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isThursday.js +11 -0
- package/dist/src/function-configs/date/isThursday.js.map +1 -1
- package/dist/src/function-configs/date/isToday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isToday.js +12 -0
- package/dist/src/function-configs/date/isToday.js.map +1 -1
- package/dist/src/function-configs/date/isTomorrow.d.ts.map +1 -1
- package/dist/src/function-configs/date/isTomorrow.js +11 -0
- package/dist/src/function-configs/date/isTomorrow.js.map +1 -1
- package/dist/src/function-configs/date/isTuesday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isTuesday.js +11 -0
- package/dist/src/function-configs/date/isTuesday.js.map +1 -1
- package/dist/src/function-configs/date/isWednesday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isWednesday.js +11 -0
- package/dist/src/function-configs/date/isWednesday.js.map +1 -1
- package/dist/src/function-configs/date/isWeekday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isWeekday.js +9 -0
- package/dist/src/function-configs/date/isWeekday.js.map +1 -1
- package/dist/src/function-configs/date/isWeekend.d.ts.map +1 -1
- package/dist/src/function-configs/date/isWeekend.js +9 -0
- package/dist/src/function-configs/date/isWeekend.js.map +1 -1
- package/dist/src/function-configs/date/isYesterday.d.ts.map +1 -1
- package/dist/src/function-configs/date/isYesterday.js +11 -0
- package/dist/src/function-configs/date/isYesterday.js.map +1 -1
- package/dist/src/function-configs/date/setDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/setDate.js +11 -0
- package/dist/src/function-configs/date/setDate.js.map +1 -1
- package/dist/src/function-configs/date/setHours.d.ts.map +1 -1
- package/dist/src/function-configs/date/setHours.js +8 -0
- package/dist/src/function-configs/date/setHours.js.map +1 -1
- package/dist/src/function-configs/date/setMilliseconds.d.ts.map +1 -1
- package/dist/src/function-configs/date/setMilliseconds.js +12 -0
- package/dist/src/function-configs/date/setMilliseconds.js.map +1 -1
- package/dist/src/function-configs/date/setMinutes.d.ts.map +1 -1
- package/dist/src/function-configs/date/setMinutes.js +8 -0
- package/dist/src/function-configs/date/setMinutes.js.map +1 -1
- package/dist/src/function-configs/date/setMonth.d.ts.map +1 -1
- package/dist/src/function-configs/date/setMonth.js +16 -0
- package/dist/src/function-configs/date/setMonth.js.map +1 -1
- package/dist/src/function-configs/date/setSeconds.d.ts.map +1 -1
- package/dist/src/function-configs/date/setSeconds.js +9 -0
- package/dist/src/function-configs/date/setSeconds.js.map +1 -1
- package/dist/src/function-configs/date/setTimezone.d.ts.map +1 -1
- package/dist/src/function-configs/date/setTimezone.js +13 -0
- package/dist/src/function-configs/date/setTimezone.js.map +1 -1
- package/dist/src/function-configs/date/setYear.d.ts.map +1 -1
- package/dist/src/function-configs/date/setYear.js +15 -0
- package/dist/src/function-configs/date/setYear.js.map +1 -1
- package/dist/src/function-configs/date/sql-utils.d.ts +89 -0
- package/dist/src/function-configs/date/sql-utils.d.ts.map +1 -0
- package/dist/src/function-configs/date/sql-utils.js +198 -0
- package/dist/src/function-configs/date/sql-utils.js.map +1 -0
- package/dist/src/function-configs/date/subtractFromDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/subtractFromDate.js +10 -0
- package/dist/src/function-configs/date/subtractFromDate.js.map +1 -1
- package/dist/src/function-configs/date/toDailyDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/toDailyDate.js +11 -0
- package/dist/src/function-configs/date/toDailyDate.js.map +1 -1
- package/dist/src/function-configs/date/toDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/toDate.js +17 -0
- package/dist/src/function-configs/date/toDate.js.map +1 -1
- package/dist/src/function-configs/date/toHourlyDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/toHourlyDate.js +11 -0
- package/dist/src/function-configs/date/toHourlyDate.js.map +1 -1
- package/dist/src/function-configs/date/toMonthlyDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/toMonthlyDate.js +11 -0
- package/dist/src/function-configs/date/toMonthlyDate.js.map +1 -1
- package/dist/src/function-configs/date/toTimeZone.d.ts.map +1 -1
- package/dist/src/function-configs/date/toTimeZone.js +13 -0
- package/dist/src/function-configs/date/toTimeZone.js.map +1 -1
- package/dist/src/function-configs/date/toTimeZoneUsingLocation.d.ts.map +1 -1
- package/dist/src/function-configs/date/toTimeZoneUsingLocation.js +22 -0
- package/dist/src/function-configs/date/toTimeZoneUsingLocation.js.map +1 -1
- package/dist/src/function-configs/date/toYearlyDate.d.ts.map +1 -1
- package/dist/src/function-configs/date/toYearlyDate.js +11 -0
- package/dist/src/function-configs/date/toYearlyDate.js.map +1 -1
- package/dist/src/function-configs/geo/geoContains.d.ts.map +1 -1
- package/dist/src/function-configs/geo/geoContains.js +11 -0
- package/dist/src/function-configs/geo/geoContains.js.map +1 -1
- package/dist/src/function-configs/geo/geoContainsPoint.d.ts.map +1 -1
- package/dist/src/function-configs/geo/geoContainsPoint.js +11 -0
- package/dist/src/function-configs/geo/geoContainsPoint.js.map +1 -1
- package/dist/src/function-configs/geo/geoDisjoint.d.ts.map +1 -1
- package/dist/src/function-configs/geo/geoDisjoint.js +7 -0
- package/dist/src/function-configs/geo/geoDisjoint.js.map +1 -1
- package/dist/src/function-configs/geo/geoIntersects.d.ts.map +1 -1
- package/dist/src/function-configs/geo/geoIntersects.js +9 -0
- package/dist/src/function-configs/geo/geoIntersects.js.map +1 -1
- package/dist/src/function-configs/geo/geoPointWithinRange.d.ts.map +1 -1
- package/dist/src/function-configs/geo/geoPointWithinRange.js +28 -0
- package/dist/src/function-configs/geo/geoPointWithinRange.js.map +1 -1
- package/dist/src/function-configs/geo/geoRelation.d.ts.map +1 -1
- package/dist/src/function-configs/geo/geoRelation.js +13 -0
- package/dist/src/function-configs/geo/geoRelation.js.map +1 -1
- package/dist/src/function-configs/geo/geoWithin.d.ts.map +1 -1
- package/dist/src/function-configs/geo/geoWithin.js +7 -0
- package/dist/src/function-configs/geo/geoWithin.js.map +1 -1
- package/dist/src/function-configs/geo/inGeoBoundingBox.d.ts.map +1 -1
- package/dist/src/function-configs/geo/inGeoBoundingBox.js +24 -1
- package/dist/src/function-configs/geo/inGeoBoundingBox.js.map +1 -1
- package/dist/src/function-configs/geo/isGeoJSON.d.ts.map +1 -1
- package/dist/src/function-configs/geo/isGeoJSON.js +6 -0
- package/dist/src/function-configs/geo/isGeoJSON.js.map +1 -1
- package/dist/src/function-configs/geo/isGeoPoint.d.ts.map +1 -1
- package/dist/src/function-configs/geo/isGeoPoint.js +13 -0
- package/dist/src/function-configs/geo/isGeoPoint.js.map +1 -1
- package/dist/src/function-configs/geo/isGeoShapeMultiPolygon.d.ts.map +1 -1
- package/dist/src/function-configs/geo/isGeoShapeMultiPolygon.js +6 -0
- package/dist/src/function-configs/geo/isGeoShapeMultiPolygon.js.map +1 -1
- package/dist/src/function-configs/geo/isGeoShapePoint.d.ts.map +1 -1
- package/dist/src/function-configs/geo/isGeoShapePoint.js +6 -0
- package/dist/src/function-configs/geo/isGeoShapePoint.js.map +1 -1
- package/dist/src/function-configs/geo/isGeoShapePolygon.d.ts.map +1 -1
- package/dist/src/function-configs/geo/isGeoShapePolygon.js +6 -0
- package/dist/src/function-configs/geo/isGeoShapePolygon.js.map +1 -1
- package/dist/src/function-configs/geo/sql-utils.d.ts +116 -0
- package/dist/src/function-configs/geo/sql-utils.d.ts.map +1 -0
- package/dist/src/function-configs/geo/sql-utils.js +179 -0
- package/dist/src/function-configs/geo/sql-utils.js.map +1 -0
- package/dist/src/function-configs/interfaces.d.ts +102 -0
- package/dist/src/function-configs/interfaces.d.ts.map +1 -1
- package/dist/src/function-configs/interfaces.js.map +1 -1
- package/dist/src/function-configs/ip/extractMappedIPv4.d.ts.map +1 -1
- package/dist/src/function-configs/ip/extractMappedIPv4.js +11 -0
- package/dist/src/function-configs/ip/extractMappedIPv4.js.map +1 -1
- package/dist/src/function-configs/ip/getCIDRBroadcast.d.ts.map +1 -1
- package/dist/src/function-configs/ip/getCIDRBroadcast.js +7 -0
- package/dist/src/function-configs/ip/getCIDRBroadcast.js.map +1 -1
- package/dist/src/function-configs/ip/getCIDRMax.d.ts.map +1 -1
- package/dist/src/function-configs/ip/getCIDRMax.js +10 -0
- package/dist/src/function-configs/ip/getCIDRMax.js.map +1 -1
- package/dist/src/function-configs/ip/getCIDRMin.d.ts.map +1 -1
- package/dist/src/function-configs/ip/getCIDRMin.js +9 -0
- package/dist/src/function-configs/ip/getCIDRMin.js.map +1 -1
- package/dist/src/function-configs/ip/getCIDRNetwork.d.ts.map +1 -1
- package/dist/src/function-configs/ip/getCIDRNetwork.js +7 -0
- package/dist/src/function-configs/ip/getCIDRNetwork.js.map +1 -1
- package/dist/src/function-configs/ip/getFirstIpInCIDR.d.ts.map +1 -1
- package/dist/src/function-configs/ip/getFirstIpInCIDR.js +11 -0
- package/dist/src/function-configs/ip/getFirstIpInCIDR.js.map +1 -1
- package/dist/src/function-configs/ip/getFirstUsableIPInCIDR.d.ts.map +1 -1
- package/dist/src/function-configs/ip/getFirstUsableIPInCIDR.js +14 -0
- package/dist/src/function-configs/ip/getFirstUsableIPInCIDR.js.map +1 -1
- package/dist/src/function-configs/ip/getLastIpInCIDR.d.ts.map +1 -1
- package/dist/src/function-configs/ip/getLastIpInCIDR.js +8 -0
- package/dist/src/function-configs/ip/getLastIpInCIDR.js.map +1 -1
- package/dist/src/function-configs/ip/getLastUsableIPInCIDR.d.ts.map +1 -1
- package/dist/src/function-configs/ip/getLastUsableIPInCIDR.js +13 -0
- package/dist/src/function-configs/ip/getLastUsableIPInCIDR.js.map +1 -1
- package/dist/src/function-configs/ip/inIPRange.d.ts.map +1 -1
- package/dist/src/function-configs/ip/inIPRange.js +15 -0
- package/dist/src/function-configs/ip/inIPRange.js.map +1 -1
- package/dist/src/function-configs/ip/intToIP.d.ts.map +1 -1
- package/dist/src/function-configs/ip/intToIP.js +25 -0
- package/dist/src/function-configs/ip/intToIP.js.map +1 -1
- package/dist/src/function-configs/ip/ipToInt.d.ts.map +1 -1
- package/dist/src/function-configs/ip/ipToInt.js +12 -0
- package/dist/src/function-configs/ip/ipToInt.js.map +1 -1
- package/dist/src/function-configs/ip/isCIDR.d.ts.map +1 -1
- package/dist/src/function-configs/ip/isCIDR.js +8 -0
- package/dist/src/function-configs/ip/isCIDR.js.map +1 -1
- package/dist/src/function-configs/ip/isIP.d.ts.map +1 -1
- package/dist/src/function-configs/ip/isIP.js +10 -0
- package/dist/src/function-configs/ip/isIP.js.map +1 -1
- package/dist/src/function-configs/ip/isIPv4.d.ts.map +1 -1
- package/dist/src/function-configs/ip/isIPv4.js +9 -0
- package/dist/src/function-configs/ip/isIPv4.js.map +1 -1
- package/dist/src/function-configs/ip/isIPv6.d.ts.map +1 -1
- package/dist/src/function-configs/ip/isIPv6.js +10 -0
- package/dist/src/function-configs/ip/isIPv6.js.map +1 -1
- package/dist/src/function-configs/ip/isMappedIPv4.d.ts.map +1 -1
- package/dist/src/function-configs/ip/isMappedIPv4.js +10 -0
- package/dist/src/function-configs/ip/isMappedIPv4.js.map +1 -1
- package/dist/src/function-configs/ip/isNonRoutableIP.d.ts.map +1 -1
- package/dist/src/function-configs/ip/isNonRoutableIP.js +8 -0
- package/dist/src/function-configs/ip/isNonRoutableIP.js.map +1 -1
- package/dist/src/function-configs/ip/isRoutableIP.d.ts.map +1 -1
- package/dist/src/function-configs/ip/isRoutableIP.js +12 -0
- package/dist/src/function-configs/ip/isRoutableIP.js.map +1 -1
- package/dist/src/function-configs/ip/reverseIP.d.ts.map +1 -1
- package/dist/src/function-configs/ip/reverseIP.js +13 -0
- package/dist/src/function-configs/ip/reverseIP.js.map +1 -1
- package/dist/src/function-configs/ip/sql-utils.d.ts +116 -0
- package/dist/src/function-configs/ip/sql-utils.d.ts.map +1 -0
- package/dist/src/function-configs/ip/sql-utils.js +187 -0
- package/dist/src/function-configs/ip/sql-utils.js.map +1 -0
- package/dist/src/function-configs/ip/toCIDR.d.ts.map +1 -1
- package/dist/src/function-configs/ip/toCIDR.js +19 -0
- package/dist/src/function-configs/ip/toCIDR.js.map +1 -1
- package/dist/src/function-configs/json/setDefault.d.ts.map +1 -1
- package/dist/src/function-configs/json/setDefault.js +17 -0
- package/dist/src/function-configs/json/setDefault.js.map +1 -1
- package/dist/src/function-configs/json/sql-utils.d.ts +20 -0
- package/dist/src/function-configs/json/sql-utils.d.ts.map +1 -0
- package/dist/src/function-configs/json/sql-utils.js +26 -0
- package/dist/src/function-configs/json/sql-utils.js.map +1 -0
- package/dist/src/function-configs/json/toJSON.d.ts.map +1 -1
- package/dist/src/function-configs/json/toJSON.js +13 -0
- package/dist/src/function-configs/json/toJSON.js.map +1 -1
- package/dist/src/function-configs/numeric/abs.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/abs.js +5 -0
- package/dist/src/function-configs/numeric/abs.js.map +1 -1
- package/dist/src/function-configs/numeric/acos.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/acos.js +12 -0
- package/dist/src/function-configs/numeric/acos.js.map +1 -1
- package/dist/src/function-configs/numeric/acosh.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/acosh.js +12 -0
- package/dist/src/function-configs/numeric/acosh.js.map +1 -1
- package/dist/src/function-configs/numeric/add.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/add.js +12 -0
- package/dist/src/function-configs/numeric/add.js.map +1 -1
- package/dist/src/function-configs/numeric/addValues.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/addValues.js +9 -0
- package/dist/src/function-configs/numeric/addValues.js.map +1 -1
- package/dist/src/function-configs/numeric/asin.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/asin.js +12 -0
- package/dist/src/function-configs/numeric/asin.js.map +1 -1
- package/dist/src/function-configs/numeric/asinh.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/asinh.js +8 -0
- package/dist/src/function-configs/numeric/asinh.js.map +1 -1
- package/dist/src/function-configs/numeric/atan.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/atan.js +8 -0
- package/dist/src/function-configs/numeric/atan.js.map +1 -1
- package/dist/src/function-configs/numeric/atan2.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/atan2.js +16 -0
- package/dist/src/function-configs/numeric/atan2.js.map +1 -1
- package/dist/src/function-configs/numeric/atanh.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/atanh.js +13 -0
- package/dist/src/function-configs/numeric/atanh.js.map +1 -1
- package/dist/src/function-configs/numeric/cbrt.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/cbrt.js +8 -0
- package/dist/src/function-configs/numeric/cbrt.js.map +1 -1
- package/dist/src/function-configs/numeric/ceil.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/ceil.js +13 -0
- package/dist/src/function-configs/numeric/ceil.js.map +1 -1
- package/dist/src/function-configs/numeric/clz32.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/clz32.js +16 -0
- package/dist/src/function-configs/numeric/clz32.js.map +1 -1
- package/dist/src/function-configs/numeric/cos.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/cos.js +8 -0
- package/dist/src/function-configs/numeric/cos.js.map +1 -1
- package/dist/src/function-configs/numeric/cosh.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/cosh.js +8 -0
- package/dist/src/function-configs/numeric/cosh.js.map +1 -1
- package/dist/src/function-configs/numeric/divide.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/divide.js +12 -0
- package/dist/src/function-configs/numeric/divide.js.map +1 -1
- package/dist/src/function-configs/numeric/divideValues.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/divideValues.js +6 -0
- package/dist/src/function-configs/numeric/divideValues.js.map +1 -1
- package/dist/src/function-configs/numeric/exp.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/exp.js +8 -0
- package/dist/src/function-configs/numeric/exp.js.map +1 -1
- package/dist/src/function-configs/numeric/floor.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/floor.js +13 -0
- package/dist/src/function-configs/numeric/floor.js.map +1 -1
- package/dist/src/function-configs/numeric/fround.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/fround.js +5 -0
- package/dist/src/function-configs/numeric/fround.js.map +1 -1
- package/dist/src/function-configs/numeric/hypot.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/hypot.js +14 -0
- package/dist/src/function-configs/numeric/hypot.js.map +1 -1
- package/dist/src/function-configs/numeric/inNumberRange.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/inNumberRange.js +20 -0
- package/dist/src/function-configs/numeric/inNumberRange.js.map +1 -1
- package/dist/src/function-configs/numeric/isEven.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/isEven.js +4 -0
- package/dist/src/function-configs/numeric/isEven.js.map +1 -1
- package/dist/src/function-configs/numeric/isGreaterThan.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/isGreaterThan.js +6 -0
- package/dist/src/function-configs/numeric/isGreaterThan.js.map +1 -1
- package/dist/src/function-configs/numeric/isGreaterThanOrEqualTo.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/isGreaterThanOrEqualTo.js +6 -0
- package/dist/src/function-configs/numeric/isGreaterThanOrEqualTo.js.map +1 -1
- package/dist/src/function-configs/numeric/isLessThan.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/isLessThan.js +6 -0
- package/dist/src/function-configs/numeric/isLessThan.js.map +1 -1
- package/dist/src/function-configs/numeric/isLessThanOrEqualTo.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/isLessThanOrEqualTo.js +6 -0
- package/dist/src/function-configs/numeric/isLessThanOrEqualTo.js.map +1 -1
- package/dist/src/function-configs/numeric/isOdd.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/isOdd.js +9 -0
- package/dist/src/function-configs/numeric/isOdd.js.map +1 -1
- package/dist/src/function-configs/numeric/log.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/log.js +13 -0
- package/dist/src/function-configs/numeric/log.js.map +1 -1
- package/dist/src/function-configs/numeric/log10.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/log10.js +13 -0
- package/dist/src/function-configs/numeric/log10.js.map +1 -1
- package/dist/src/function-configs/numeric/log2.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/log2.js +13 -0
- package/dist/src/function-configs/numeric/log2.js.map +1 -1
- package/dist/src/function-configs/numeric/maxValues.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/maxValues.js +6 -0
- package/dist/src/function-configs/numeric/maxValues.js.map +1 -1
- package/dist/src/function-configs/numeric/minValues.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/minValues.js +6 -0
- package/dist/src/function-configs/numeric/minValues.js.map +1 -1
- package/dist/src/function-configs/numeric/modulus.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/modulus.js +9 -0
- package/dist/src/function-configs/numeric/modulus.js.map +1 -1
- package/dist/src/function-configs/numeric/multiply.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/multiply.js +12 -0
- package/dist/src/function-configs/numeric/multiply.js.map +1 -1
- package/dist/src/function-configs/numeric/multiplyValues.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/multiplyValues.js +6 -0
- package/dist/src/function-configs/numeric/multiplyValues.js.map +1 -1
- package/dist/src/function-configs/numeric/pow.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/pow.js +7 -0
- package/dist/src/function-configs/numeric/pow.js.map +1 -1
- package/dist/src/function-configs/numeric/round.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/round.js +13 -0
- package/dist/src/function-configs/numeric/round.js.map +1 -1
- package/dist/src/function-configs/numeric/setPrecision.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/setPrecision.js +26 -0
- package/dist/src/function-configs/numeric/setPrecision.js.map +1 -1
- package/dist/src/function-configs/numeric/sign.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/sign.js +5 -0
- package/dist/src/function-configs/numeric/sign.js.map +1 -1
- package/dist/src/function-configs/numeric/sin.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/sin.js +8 -0
- package/dist/src/function-configs/numeric/sin.js.map +1 -1
- package/dist/src/function-configs/numeric/sinh.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/sinh.js +8 -0
- package/dist/src/function-configs/numeric/sinh.js.map +1 -1
- package/dist/src/function-configs/numeric/sql-utils.d.ts +54 -0
- package/dist/src/function-configs/numeric/sql-utils.d.ts.map +1 -0
- package/dist/src/function-configs/numeric/sql-utils.js +76 -0
- package/dist/src/function-configs/numeric/sql-utils.js.map +1 -0
- package/dist/src/function-configs/numeric/sqrt.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/sqrt.js +10 -0
- package/dist/src/function-configs/numeric/sqrt.js.map +1 -1
- package/dist/src/function-configs/numeric/subtract.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/subtract.js +12 -0
- package/dist/src/function-configs/numeric/subtract.js.map +1 -1
- package/dist/src/function-configs/numeric/subtractValues.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/subtractValues.js +9 -0
- package/dist/src/function-configs/numeric/subtractValues.js.map +1 -1
- package/dist/src/function-configs/numeric/tan.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/tan.js +8 -0
- package/dist/src/function-configs/numeric/tan.js.map +1 -1
- package/dist/src/function-configs/numeric/tanh.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/tanh.js +8 -0
- package/dist/src/function-configs/numeric/tanh.js.map +1 -1
- package/dist/src/function-configs/numeric/toCelsius.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/toCelsius.js +14 -0
- package/dist/src/function-configs/numeric/toCelsius.js.map +1 -1
- package/dist/src/function-configs/numeric/toFahrenheit.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/toFahrenheit.js +14 -0
- package/dist/src/function-configs/numeric/toFahrenheit.js.map +1 -1
- package/dist/src/function-configs/numeric/toNumber.d.ts.map +1 -1
- package/dist/src/function-configs/numeric/toNumber.js +42 -0
- package/dist/src/function-configs/numeric/toNumber.js.map +1 -1
- package/dist/src/function-configs/object/equals.d.ts.map +1 -1
- package/dist/src/function-configs/object/equals.js +14 -0
- package/dist/src/function-configs/object/equals.js.map +1 -1
- package/dist/src/function-configs/object/isEmpty.d.ts.map +1 -1
- package/dist/src/function-configs/object/isEmpty.js +26 -0
- package/dist/src/function-configs/object/isEmpty.js.map +1 -1
- package/dist/src/function-configs/object/lookup.d.ts.map +1 -1
- package/dist/src/function-configs/object/lookup.js +8 -0
- package/dist/src/function-configs/object/lookup.js.map +1 -1
- package/dist/src/function-configs/object/sql-utils.d.ts +5 -0
- package/dist/src/function-configs/object/sql-utils.d.ts.map +1 -0
- package/dist/src/function-configs/object/sql-utils.js +96 -0
- package/dist/src/function-configs/object/sql-utils.js.map +1 -0
- package/dist/src/function-configs/sql-helpers.d.ts +115 -0
- package/dist/src/function-configs/sql-helpers.d.ts.map +1 -0
- package/dist/src/function-configs/sql-helpers.js +169 -0
- package/dist/src/function-configs/sql-helpers.js.map +1 -0
- package/dist/src/function-configs/string/contains.d.ts.map +1 -1
- package/dist/src/function-configs/string/contains.js +5 -0
- package/dist/src/function-configs/string/contains.js.map +1 -1
- package/dist/src/function-configs/string/createID.d.ts.map +1 -1
- package/dist/src/function-configs/string/createID.js +16 -0
- package/dist/src/function-configs/string/createID.js.map +1 -1
- package/dist/src/function-configs/string/decodeBase64.d.ts.map +1 -1
- package/dist/src/function-configs/string/decodeBase64.js +14 -0
- package/dist/src/function-configs/string/decodeBase64.js.map +1 -1
- package/dist/src/function-configs/string/decodeHex.d.ts.map +1 -1
- package/dist/src/function-configs/string/decodeHex.js +13 -0
- package/dist/src/function-configs/string/decodeHex.js.map +1 -1
- package/dist/src/function-configs/string/decodeURL.d.ts.map +1 -1
- package/dist/src/function-configs/string/decodeURL.js +7 -0
- package/dist/src/function-configs/string/decodeURL.js.map +1 -1
- package/dist/src/function-configs/string/encode.d.ts.map +1 -1
- package/dist/src/function-configs/string/encode.js +14 -0
- package/dist/src/function-configs/string/encode.js.map +1 -1
- package/dist/src/function-configs/string/encodeBase64.d.ts.map +1 -1
- package/dist/src/function-configs/string/encodeBase64.js +10 -0
- package/dist/src/function-configs/string/encodeBase64.js.map +1 -1
- package/dist/src/function-configs/string/encodeHex.d.ts.map +1 -1
- package/dist/src/function-configs/string/encodeHex.js +9 -0
- package/dist/src/function-configs/string/encodeHex.js.map +1 -1
- package/dist/src/function-configs/string/encodeSHA.d.ts.map +1 -1
- package/dist/src/function-configs/string/encodeSHA.js +11 -0
- package/dist/src/function-configs/string/encodeSHA.js.map +1 -1
- package/dist/src/function-configs/string/encodeSHA1.d.ts.map +1 -1
- package/dist/src/function-configs/string/encodeSHA1.js +10 -0
- package/dist/src/function-configs/string/encodeSHA1.js.map +1 -1
- package/dist/src/function-configs/string/encodeURL.d.ts.map +1 -1
- package/dist/src/function-configs/string/encodeURL.js +7 -0
- package/dist/src/function-configs/string/encodeURL.js.map +1 -1
- package/dist/src/function-configs/string/endsWith.d.ts.map +1 -1
- package/dist/src/function-configs/string/endsWith.js +5 -0
- package/dist/src/function-configs/string/endsWith.js.map +1 -1
- package/dist/src/function-configs/string/entropy.d.ts.map +1 -1
- package/dist/src/function-configs/string/entropy.js +17 -0
- package/dist/src/function-configs/string/entropy.js.map +1 -1
- package/dist/src/function-configs/string/extract.d.ts.map +1 -1
- package/dist/src/function-configs/string/extract.js +48 -1
- package/dist/src/function-configs/string/extract.js.map +1 -1
- package/dist/src/function-configs/string/isAlpha.d.ts.map +1 -1
- package/dist/src/function-configs/string/isAlpha.js +10 -0
- package/dist/src/function-configs/string/isAlpha.js.map +1 -1
- package/dist/src/function-configs/string/isAlphaNumeric.d.ts.map +1 -1
- package/dist/src/function-configs/string/isAlphaNumeric.js +6 -0
- package/dist/src/function-configs/string/isAlphaNumeric.js.map +1 -1
- package/dist/src/function-configs/string/isBase64.d.ts.map +1 -1
- package/dist/src/function-configs/string/isBase64.js +13 -0
- package/dist/src/function-configs/string/isBase64.js.map +1 -1
- package/dist/src/function-configs/string/isCountryCode.d.ts.map +1 -1
- package/dist/src/function-configs/string/isCountryCode.js +16 -0
- package/dist/src/function-configs/string/isCountryCode.js.map +1 -1
- package/dist/src/function-configs/string/isEmail.d.ts.map +1 -1
- package/dist/src/function-configs/string/isEmail.js +10 -0
- package/dist/src/function-configs/string/isEmail.js.map +1 -1
- package/dist/src/function-configs/string/isFQDN.d.ts.map +1 -1
- package/dist/src/function-configs/string/isFQDN.js +9 -0
- package/dist/src/function-configs/string/isFQDN.js.map +1 -1
- package/dist/src/function-configs/string/isHash.d.ts.map +1 -1
- package/dist/src/function-configs/string/isHash.js +9 -0
- package/dist/src/function-configs/string/isHash.js.map +1 -1
- package/dist/src/function-configs/string/isLength.d.ts.map +1 -1
- package/dist/src/function-configs/string/isLength.js +23 -0
- package/dist/src/function-configs/string/isLength.js.map +1 -1
- package/dist/src/function-configs/string/isMACAddress.d.ts.map +1 -1
- package/dist/src/function-configs/string/isMACAddress.js +17 -0
- package/dist/src/function-configs/string/isMACAddress.js.map +1 -1
- package/dist/src/function-configs/string/isMIMEType.d.ts.map +1 -1
- package/dist/src/function-configs/string/isMIMEType.js +10 -0
- package/dist/src/function-configs/string/isMIMEType.js.map +1 -1
- package/dist/src/function-configs/string/isPhoneNumberLike.d.ts.map +1 -1
- package/dist/src/function-configs/string/isPhoneNumberLike.js +14 -0
- package/dist/src/function-configs/string/isPhoneNumberLike.js.map +1 -1
- package/dist/src/function-configs/string/isPort.d.ts.map +1 -1
- package/dist/src/function-configs/string/isPort.js +12 -0
- package/dist/src/function-configs/string/isPort.js.map +1 -1
- package/dist/src/function-configs/string/isPostalCode.d.ts.map +1 -1
- package/dist/src/function-configs/string/isPostalCode.js +12 -0
- package/dist/src/function-configs/string/isPostalCode.js.map +1 -1
- package/dist/src/function-configs/string/isString.d.ts.map +1 -1
- package/dist/src/function-configs/string/isString.js +7 -0
- package/dist/src/function-configs/string/isString.js.map +1 -1
- package/dist/src/function-configs/string/isUUID.d.ts.map +1 -1
- package/dist/src/function-configs/string/isUUID.js +9 -0
- package/dist/src/function-configs/string/isUUID.js.map +1 -1
- package/dist/src/function-configs/string/join.d.ts.map +1 -1
- package/dist/src/function-configs/string/join.js +17 -0
- package/dist/src/function-configs/string/join.js.map +1 -1
- package/dist/src/function-configs/string/postal-code-utils.d.ts +13 -0
- package/dist/src/function-configs/string/postal-code-utils.d.ts.map +1 -0
- package/dist/src/function-configs/string/postal-code-utils.js +160 -0
- package/dist/src/function-configs/string/postal-code-utils.js.map +1 -0
- package/dist/src/function-configs/string/replaceLiteral.d.ts.map +1 -1
- package/dist/src/function-configs/string/replaceLiteral.js +22 -0
- package/dist/src/function-configs/string/replaceLiteral.js.map +1 -1
- package/dist/src/function-configs/string/replaceRegex.d.ts.map +1 -1
- package/dist/src/function-configs/string/replaceRegex.js +34 -0
- package/dist/src/function-configs/string/replaceRegex.js.map +1 -1
- package/dist/src/function-configs/string/reverse.d.ts.map +1 -1
- package/dist/src/function-configs/string/reverse.js +16 -0
- package/dist/src/function-configs/string/reverse.js.map +1 -1
- package/dist/src/function-configs/string/split.d.ts.map +1 -1
- package/dist/src/function-configs/string/split.js +13 -0
- package/dist/src/function-configs/string/split.js.map +1 -1
- package/dist/src/function-configs/string/sql-regex-utils.d.ts +91 -0
- package/dist/src/function-configs/string/sql-regex-utils.d.ts.map +1 -0
- package/dist/src/function-configs/string/sql-regex-utils.js +123 -0
- package/dist/src/function-configs/string/sql-regex-utils.js.map +1 -0
- package/dist/src/function-configs/string/sql-utils.d.ts +191 -0
- package/dist/src/function-configs/string/sql-utils.d.ts.map +1 -0
- package/dist/src/function-configs/string/sql-utils.js +321 -0
- package/dist/src/function-configs/string/sql-utils.js.map +1 -0
- package/dist/src/function-configs/string/sql-validator-utils.d.ts +49 -0
- package/dist/src/function-configs/string/sql-validator-utils.d.ts.map +1 -0
- package/dist/src/function-configs/string/sql-validator-utils.js +327 -0
- package/dist/src/function-configs/string/sql-validator-utils.js.map +1 -0
- package/dist/src/function-configs/string/startsWith.d.ts.map +1 -1
- package/dist/src/function-configs/string/startsWith.js +5 -0
- package/dist/src/function-configs/string/startsWith.js.map +1 -1
- package/dist/src/function-configs/string/toCamelCase.d.ts.map +1 -1
- package/dist/src/function-configs/string/toCamelCase.js +18 -0
- package/dist/src/function-configs/string/toCamelCase.js.map +1 -1
- package/dist/src/function-configs/string/toKebabCase.d.ts.map +1 -1
- package/dist/src/function-configs/string/toKebabCase.js +18 -0
- package/dist/src/function-configs/string/toKebabCase.js.map +1 -1
- package/dist/src/function-configs/string/toLowerCase.d.ts.map +1 -1
- package/dist/src/function-configs/string/toLowerCase.js +13 -0
- package/dist/src/function-configs/string/toLowerCase.js.map +1 -1
- package/dist/src/function-configs/string/toPascalCase.d.ts.map +1 -1
- package/dist/src/function-configs/string/toPascalCase.js +18 -0
- package/dist/src/function-configs/string/toPascalCase.js.map +1 -1
- package/dist/src/function-configs/string/toSnakeCase.d.ts.map +1 -1
- package/dist/src/function-configs/string/toSnakeCase.js +18 -0
- package/dist/src/function-configs/string/toSnakeCase.js.map +1 -1
- package/dist/src/function-configs/string/toString.d.ts.map +1 -1
- package/dist/src/function-configs/string/toString.js +42 -0
- package/dist/src/function-configs/string/toString.js.map +1 -1
- package/dist/src/function-configs/string/toTitleCase.d.ts.map +1 -1
- package/dist/src/function-configs/string/toTitleCase.js +19 -0
- package/dist/src/function-configs/string/toTitleCase.js.map +1 -1
- package/dist/src/function-configs/string/toUpperCase.d.ts.map +1 -1
- package/dist/src/function-configs/string/toUpperCase.js +13 -0
- package/dist/src/function-configs/string/toUpperCase.js.map +1 -1
- package/dist/src/function-configs/string/trim.d.ts.map +1 -1
- package/dist/src/function-configs/string/trim.js +11 -0
- package/dist/src/function-configs/string/trim.js.map +1 -1
- package/dist/src/function-configs/string/trimEnd.d.ts.map +1 -1
- package/dist/src/function-configs/string/trimEnd.js +11 -0
- package/dist/src/function-configs/string/trimEnd.js.map +1 -1
- package/dist/src/function-configs/string/trimStart.d.ts.map +1 -1
- package/dist/src/function-configs/string/trimStart.js +11 -0
- package/dist/src/function-configs/string/trimStart.js.map +1 -1
- package/dist/src/function-configs/string/truncate.d.ts.map +1 -1
- package/dist/src/function-configs/string/truncate.js +15 -0
- package/dist/src/function-configs/string/truncate.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/teal-frame/DuckContext.d.ts +105 -0
- package/dist/src/teal-frame/DuckContext.d.ts.map +1 -0
- package/dist/src/teal-frame/DuckContext.js +244 -0
- package/dist/src/teal-frame/DuckContext.js.map +1 -0
- package/dist/src/teal-frame/TealFrame.d.ts +371 -0
- package/dist/src/teal-frame/TealFrame.d.ts.map +1 -0
- package/dist/src/teal-frame/TealFrame.js +575 -0
- package/dist/src/teal-frame/TealFrame.js.map +1 -0
- package/dist/src/teal-frame/append.d.ts +45 -0
- package/dist/src/teal-frame/append.d.ts.map +1 -0
- package/dist/src/teal-frame/append.js +136 -0
- package/dist/src/teal-frame/append.js.map +1 -0
- package/dist/src/teal-frame/clauses.d.ts +22 -0
- package/dist/src/teal-frame/clauses.d.ts.map +1 -0
- package/dist/src/teal-frame/clauses.js +41 -0
- package/dist/src/teal-frame/clauses.js.map +1 -0
- package/dist/src/teal-frame/database.d.ts +46 -0
- package/dist/src/teal-frame/database.d.ts.map +1 -0
- package/dist/src/teal-frame/database.js +91 -0
- package/dist/src/teal-frame/database.js.map +1 -0
- package/dist/src/teal-frame/date-value.d.ts +55 -0
- package/dist/src/teal-frame/date-value.d.ts.map +1 -0
- package/dist/src/teal-frame/date-value.js +106 -0
- package/dist/src/teal-frame/date-value.js.map +1 -0
- package/dist/src/teal-frame/deep-select.d.ts +8 -0
- package/dist/src/teal-frame/deep-select.d.ts.map +1 -0
- package/dist/src/teal-frame/deep-select.js +125 -0
- package/dist/src/teal-frame/deep-select.js.map +1 -0
- package/dist/src/teal-frame/duck-values.d.ts +37 -0
- package/dist/src/teal-frame/duck-values.d.ts.map +1 -0
- package/dist/src/teal-frame/duck-values.js +173 -0
- package/dist/src/teal-frame/duck-values.js.map +1 -0
- package/dist/src/teal-frame/errors.d.ts +38 -0
- package/dist/src/teal-frame/errors.d.ts.map +1 -0
- package/dist/src/teal-frame/errors.js +63 -0
- package/dist/src/teal-frame/errors.js.map +1 -0
- package/dist/src/teal-frame/expand-values.d.ts +29 -0
- package/dist/src/teal-frame/expand-values.d.ts.map +1 -0
- package/dist/src/teal-frame/expand-values.js +53 -0
- package/dist/src/teal-frame/expand-values.js.map +1 -0
- package/dist/src/teal-frame/export-json.d.ts +58 -0
- package/dist/src/teal-frame/export-json.d.ts.map +1 -0
- package/dist/src/teal-frame/export-json.js +409 -0
- package/dist/src/teal-frame/export-json.js.map +1 -0
- package/dist/src/teal-frame/extension-tools.d.ts +40 -0
- package/dist/src/teal-frame/extension-tools.d.ts.map +1 -0
- package/dist/src/teal-frame/extension-tools.js +115 -0
- package/dist/src/teal-frame/extension-tools.js.map +1 -0
- package/dist/src/teal-frame/extensions-cli.d.ts +2 -0
- package/dist/src/teal-frame/extensions-cli.d.ts.map +1 -0
- package/dist/src/teal-frame/extensions-cli.js +56 -0
- package/dist/src/teal-frame/extensions-cli.js.map +1 -0
- package/dist/src/teal-frame/extensions.d.ts +53 -0
- package/dist/src/teal-frame/extensions.d.ts.map +1 -0
- package/dist/src/teal-frame/extensions.js +110 -0
- package/dist/src/teal-frame/extensions.js.map +1 -0
- package/dist/src/teal-frame/index.d.ts +23 -0
- package/dist/src/teal-frame/index.d.ts.map +1 -0
- package/dist/src/teal-frame/index.js +23 -0
- package/dist/src/teal-frame/index.js.map +1 -0
- package/dist/src/teal-frame/interfaces.d.ts +186 -0
- package/dist/src/teal-frame/interfaces.d.ts.map +1 -0
- package/dist/src/teal-frame/interfaces.js +2 -0
- package/dist/src/teal-frame/interfaces.js.map +1 -0
- package/dist/src/teal-frame/line-stream.d.ts +10 -0
- package/dist/src/teal-frame/line-stream.d.ts.map +1 -0
- package/dist/src/teal-frame/line-stream.js +35 -0
- package/dist/src/teal-frame/line-stream.js.map +1 -0
- package/dist/src/teal-frame/order-safety.d.ts +15 -0
- package/dist/src/teal-frame/order-safety.d.ts.map +1 -0
- package/dist/src/teal-frame/order-safety.js +21 -0
- package/dist/src/teal-frame/order-safety.js.map +1 -0
- package/dist/src/teal-frame/output.d.ts +18 -0
- package/dist/src/teal-frame/output.d.ts.map +1 -0
- package/dist/src/teal-frame/output.js +63 -0
- package/dist/src/teal-frame/output.js.map +1 -0
- package/dist/src/teal-frame/parquet-columns.d.ts +15 -0
- package/dist/src/teal-frame/parquet-columns.d.ts.map +1 -0
- package/dist/src/teal-frame/parquet-columns.js +45 -0
- package/dist/src/teal-frame/parquet-columns.js.map +1 -0
- package/dist/src/teal-frame/plain-values.d.ts +30 -0
- package/dist/src/teal-frame/plain-values.d.ts.map +1 -0
- package/dist/src/teal-frame/plain-values.js +69 -0
- package/dist/src/teal-frame/plain-values.js.map +1 -0
- package/dist/src/teal-frame/row-shape.d.ts +21 -0
- package/dist/src/teal-frame/row-shape.d.ts.map +1 -0
- package/dist/src/teal-frame/row-shape.js +94 -0
- package/dist/src/teal-frame/row-shape.js.map +1 -0
- package/dist/src/teal-frame/scalar-function.d.ts +66 -0
- package/dist/src/teal-frame/scalar-function.d.ts.map +1 -0
- package/dist/src/teal-frame/scalar-function.js +75 -0
- package/dist/src/teal-frame/scalar-function.js.map +1 -0
- package/dist/src/teal-frame/schema-check.d.ts +43 -0
- package/dist/src/teal-frame/schema-check.d.ts.map +1 -0
- package/dist/src/teal-frame/schema-check.js +66 -0
- package/dist/src/teal-frame/schema-check.js.map +1 -0
- package/dist/src/teal-frame/sources.d.ts +14 -0
- package/dist/src/teal-frame/sources.d.ts.map +1 -0
- package/dist/src/teal-frame/sources.js +28 -0
- package/dist/src/teal-frame/sources.js.map +1 -0
- package/dist/src/teal-frame/table.d.ts +19 -0
- package/dist/src/teal-frame/table.d.ts.map +1 -0
- package/dist/src/teal-frame/table.js +64 -0
- package/dist/src/teal-frame/table.js.map +1 -0
- package/dist/src/teal-frame/udf-types.d.ts +45 -0
- package/dist/src/teal-frame/udf-types.d.ts.map +1 -0
- package/dist/src/teal-frame/udf-types.js +157 -0
- package/dist/src/teal-frame/udf-types.js.map +1 -0
- package/dist/src/teal-frame/wkb.d.ts +6 -0
- package/dist/src/teal-frame/wkb.d.ts.map +1 -0
- package/dist/src/teal-frame/wkb.js +167 -0
- package/dist/src/teal-frame/wkb.js.map +1 -0
- package/package.json +16 -9
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { DuckDBDataChunk } from '@duckdb/node-api';
|
|
2
|
+
import { quoteIdentifier } from '@terascope/sql-builder';
|
|
3
|
+
import { MAX_CHUNK_ROWS } from './DuckContext.js';
|
|
4
|
+
import { AppendError, CoercionFailureError } from './errors.js';
|
|
5
|
+
import { describeSource, readParquetSource } from './sources.js';
|
|
6
|
+
import { buildPlan } from './table.js';
|
|
7
|
+
/**
|
|
8
|
+
* Loads rows into a frame's table. Used by `TealFrame.append` and `fromRecords`.
|
|
9
|
+
*
|
|
10
|
+
* Records arrive as JS objects, are coerced with `coerceToType` (the same function
|
|
11
|
+
* `DataFrame`'s builder uses) and are appended as typed values, with no JSON round trip.
|
|
12
|
+
* Because the coercion code is shared, field semantics match `DataFrame` exactly.
|
|
13
|
+
*
|
|
14
|
+
* These are free functions because none of them needs the frame. Each takes the append's own
|
|
15
|
+
* connection (see `appendInTransaction`), the table name and the input.
|
|
16
|
+
*/
|
|
17
|
+
/** Counts a table's rows without throwing. Used while reporting a failure, where a second
|
|
18
|
+
* error would hide the original one. */
|
|
19
|
+
export async function countQuietly(connection, table) {
|
|
20
|
+
try {
|
|
21
|
+
const result = await connection.run(`SELECT count(*) FROM ${quoteIdentifier(table)}`);
|
|
22
|
+
const rows = await result.getRowsJson();
|
|
23
|
+
return Number(rows[0]?.[0] ?? 0);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Appends Parquet files with `INSERT ... BY NAME`.
|
|
31
|
+
*
|
|
32
|
+
* Columns are matched by name because a positional `INSERT ... SELECT *` fails when a file's
|
|
33
|
+
* column order differs from the table's, and separately produced files may not agree on order.
|
|
34
|
+
*
|
|
35
|
+
* No coercion is needed: Parquet is typed, and the values were coerced by `fromRecords` when
|
|
36
|
+
* the file was written.
|
|
37
|
+
*/
|
|
38
|
+
export async function appendParquet(connection, table, paths) {
|
|
39
|
+
const result = await connection.run(`INSERT INTO ${quoteIdentifier(table)} BY NAME`
|
|
40
|
+
+ ` SELECT * FROM ${readParquetSource(paths)}`);
|
|
41
|
+
const rows = await result.getRowsJson();
|
|
42
|
+
return Number(rows[0]?.[0] ?? 0);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Coerces records with `coerceToType` and appends them through a typed DuckDB appender.
|
|
46
|
+
*
|
|
47
|
+
* `strict` (the default) throws on the first bad value, as `DataFrame`'s builder does.
|
|
48
|
+
* `lenient` stores null instead and collects each failing field with a count and an example.
|
|
49
|
+
*/
|
|
50
|
+
export async function appendRecords(connection, config, table, records, options) {
|
|
51
|
+
const plan = buildPlan(config);
|
|
52
|
+
const lenient = (options.mode ?? 'strict') === 'lenient';
|
|
53
|
+
const failures = new Map();
|
|
54
|
+
/** Records one failure. In strict mode this throws immediately. */
|
|
55
|
+
const recordFailure = (name, fieldType, value) => {
|
|
56
|
+
const existing = failures.get(name);
|
|
57
|
+
if (existing) {
|
|
58
|
+
existing.failedCount += 1;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
failures.set(name, {
|
|
62
|
+
field: name,
|
|
63
|
+
fieldType,
|
|
64
|
+
failedCount: 1,
|
|
65
|
+
exampleValue: String(value),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (!lenient) {
|
|
69
|
+
throw new CoercionFailureError(`coercion failed for field ${name} (${fieldType}):`
|
|
70
|
+
+ ` ${JSON.stringify(String(value))}`, [...failures.values()]);
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
};
|
|
74
|
+
const appender = await connection.createAppender(table);
|
|
75
|
+
const chunkTypes = (await connection.run(`SELECT * FROM ${quoteIdentifier(table)} LIMIT 0`)).columnTypes();
|
|
76
|
+
try {
|
|
77
|
+
for (let offset = 0; offset < records.length; offset += MAX_CHUNK_ROWS) {
|
|
78
|
+
const window = records.slice(offset, offset + MAX_CHUNK_ROWS);
|
|
79
|
+
const chunk = DuckDBDataChunk.create(chunkTypes, window.length);
|
|
80
|
+
chunk.setColumns(plan.map(({ name, fieldType, coerce, convert }) => (window.map((record) => {
|
|
81
|
+
try {
|
|
82
|
+
return convert(coerce(record[name]));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return recordFailure(name, fieldType, record[name]);
|
|
86
|
+
}
|
|
87
|
+
}))));
|
|
88
|
+
appender.appendDataChunk(chunk);
|
|
89
|
+
}
|
|
90
|
+
appender.flushSync();
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
// close on failure too, so the rollback does not run while the appender is open
|
|
94
|
+
appender.closeSync();
|
|
95
|
+
}
|
|
96
|
+
return records.length;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Runs one `TealFrame.append` as an atomic transaction on its own connection.
|
|
100
|
+
*
|
|
101
|
+
* **The separate connection is required for correctness.** A DuckDB transaction belongs to a
|
|
102
|
+
* connection, and the shared connection is used by the whole process. If two appends shared it,
|
|
103
|
+
* the second `BEGIN` would throw, its `ROLLBACK` would discard the first append's rows, and every
|
|
104
|
+
* later statement would fail with `Current transaction is aborted`.
|
|
105
|
+
*
|
|
106
|
+
* With one connection per append, concurrent appends to the same table are safe: DuckDB's MVCC
|
|
107
|
+
* lets appends proceed without write conflicts.
|
|
108
|
+
*/
|
|
109
|
+
export async function appendInTransaction(instance, config, table, source, options) {
|
|
110
|
+
const connection = await instance.connect();
|
|
111
|
+
try {
|
|
112
|
+
await connection.run('BEGIN TRANSACTION');
|
|
113
|
+
try {
|
|
114
|
+
const added = source.records === undefined
|
|
115
|
+
? await appendParquet(connection, table, source.parquet)
|
|
116
|
+
: await appendRecords(connection, config, table, source.records, options);
|
|
117
|
+
await connection.run('COMMIT');
|
|
118
|
+
return added;
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
await connection.run('ROLLBACK');
|
|
122
|
+
throw new AppendError({
|
|
123
|
+
table,
|
|
124
|
+
source: source.records === undefined ? 'parquet' : 'records',
|
|
125
|
+
describedSource: describeSource(source),
|
|
126
|
+
// counted after the rollback, so it reports what is left; a successful
|
|
127
|
+
// append never pays for the count
|
|
128
|
+
rowsRemaining: await countQuietly(connection, table),
|
|
129
|
+
}, err);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
connection.disconnectSync();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=append.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"append.js","sourceRoot":"","sources":["../../../src/teal-frame/append.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SelectList } from './interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* SQL clause helpers specific to the frame.
|
|
4
|
+
*
|
|
5
|
+
* `ORDER BY`, `GROUP BY` and `LIMIT`/`OFFSET` come from `@terascope/sql-builder` so that
|
|
6
|
+
* translated statements render them the same way. Only the projection is built here.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Builds a `SELECT` list and the column names it produces.
|
|
10
|
+
*
|
|
11
|
+
* With a map, the keys are the column names and each expression is aliased to its key.
|
|
12
|
+
* A verbatim string cannot be turned back into column names without parsing SQL
|
|
13
|
+
* (`struct_pack(...) AS "nested"` and `a.*` are both valid), so it must come with
|
|
14
|
+
* `columns`. `QueryAccess.restrictSQLParts` returns both.
|
|
15
|
+
*/
|
|
16
|
+
export declare function selectList(select: SelectList, columns?: readonly string[]): {
|
|
17
|
+
list: string;
|
|
18
|
+
names: readonly string[];
|
|
19
|
+
};
|
|
20
|
+
/** Joins SQL fragments with a single space, dropping the ones that are empty. */
|
|
21
|
+
export declare function joinSQL(...parts: readonly string[]): string;
|
|
22
|
+
//# sourceMappingURL=clauses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clauses.d.ts","sourceRoot":"","sources":["../../../src/teal-frame/clauses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;EAKE;AAEF;;;;;;;EAOE;AACF,wBAAgB,UAAU,CACtB,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAwB5C;AAED,iFAAiF;AACjF,wBAAgB,OAAO,CAAC,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE3D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { quoteIdentifier } from '@terascope/sql-builder';
|
|
2
|
+
/**
|
|
3
|
+
* SQL clause helpers specific to the frame.
|
|
4
|
+
*
|
|
5
|
+
* `ORDER BY`, `GROUP BY` and `LIMIT`/`OFFSET` come from `@terascope/sql-builder` so that
|
|
6
|
+
* translated statements render them the same way. Only the projection is built here.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Builds a `SELECT` list and the column names it produces.
|
|
10
|
+
*
|
|
11
|
+
* With a map, the keys are the column names and each expression is aliased to its key.
|
|
12
|
+
* A verbatim string cannot be turned back into column names without parsing SQL
|
|
13
|
+
* (`struct_pack(...) AS "nested"` and `a.*` are both valid), so it must come with
|
|
14
|
+
* `columns`. `QueryAccess.restrictSQLParts` returns both.
|
|
15
|
+
*/
|
|
16
|
+
export function selectList(select, columns) {
|
|
17
|
+
if (typeof select === 'string') {
|
|
18
|
+
if (!select.trim()) {
|
|
19
|
+
throw new TypeError('a verbatim SELECT list cannot be empty');
|
|
20
|
+
}
|
|
21
|
+
if (columns == null) {
|
|
22
|
+
throw new TypeError('a verbatim SELECT list needs its `columns`, because a SELECT list cannot be'
|
|
23
|
+
+ ' parsed back into column names - QueryAccess.restrictSQLParts returns them'
|
|
24
|
+
+ ' beside it');
|
|
25
|
+
}
|
|
26
|
+
return { list: select, names: columns };
|
|
27
|
+
}
|
|
28
|
+
const names = Object.keys(select);
|
|
29
|
+
if (names.length === 0) {
|
|
30
|
+
throw new TypeError('select requires at least one expression');
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
list: names.map((name) => `${select[name]} AS ${quoteIdentifier(name)}`).join(', '),
|
|
34
|
+
names,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Joins SQL fragments with a single space, dropping the ones that are empty. */
|
|
38
|
+
export function joinSQL(...parts) {
|
|
39
|
+
return parts.filter(Boolean).join(' ');
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=clauses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clauses.js","sourceRoot":"","sources":["../../../src/teal-frame/clauses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;;;;EAKE;AAEF;;;;;;;EAOE;AACF,MAAM,UAAU,UAAU,CACtB,MAAkB,EAClB,OAA2B;IAE3B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,SAAS,CACf,6EAA6E;kBAC3E,4EAA4E;kBAC5E,YAAY,CACjB,CAAC;QACN,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACH,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACnF,KAAK;KACR,CAAC;AACN,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,OAAO,CAAC,GAAG,KAAwB;IAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { DuckContext } from './DuckContext.js';
|
|
2
|
+
import { ScalarFunctionSpec } from './scalar-function.js';
|
|
3
|
+
import { DuckDatabaseOptions } from './interfaces.js';
|
|
4
|
+
/**
|
|
5
|
+
* Returns the context for a database path, creating it on first use and caching it per path.
|
|
6
|
+
*
|
|
7
|
+
* `:memory:` is the process-wide default. Any other path is a file-backed database, which is
|
|
8
|
+
* also how a test gets an isolated catalog.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getContext(database?: string): Promise<DuckContext>;
|
|
11
|
+
/**
|
|
12
|
+
* Opens or reconfigures a database, and resolves once the settings are applied.
|
|
13
|
+
*
|
|
14
|
+
* Call it once at startup, for example to give DuckDB a directory to spill to:
|
|
15
|
+
* `configureDuckDatabase({ tempDirectory: '/var/tmp/duck', memoryLimit: '48GB' })`.
|
|
16
|
+
* Calling it on a database that is already open updates the settings in place.
|
|
17
|
+
*/
|
|
18
|
+
export declare function configureDuckDatabase(options?: DuckDatabaseOptions): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Registers a scalar function (UDF) so SQL can call a data-mate function's JavaScript
|
|
21
|
+
* implementation.
|
|
22
|
+
*
|
|
23
|
+
* This is how a data-mate function without a native SQL translation runs inside a query.
|
|
24
|
+
* Calling the JavaScript implementation guarantees the same results as `DataFrame`, whereas
|
|
25
|
+
* DuckDB's own casts and functions often differ from it on edge cases.
|
|
26
|
+
*
|
|
27
|
+
* Registration is instance-wide, so the function is available to every frame and every
|
|
28
|
+
* stream on that database. Returns the function's name.
|
|
29
|
+
*/
|
|
30
|
+
export declare function registerScalarFunction(spec: ScalarFunctionSpec & {
|
|
31
|
+
database?: string;
|
|
32
|
+
}): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* The number of scalar functions registered on a database.
|
|
35
|
+
*
|
|
36
|
+
* DuckDB cannot unregister a function, so this grows with the functions and data types in use
|
|
37
|
+
* (never with their arguments; see `scalar-function.ts`). A long-running process may want to
|
|
38
|
+
* report it as a metric.
|
|
39
|
+
*/
|
|
40
|
+
export declare function registeredFunctionCount(database?: string): Promise<number>;
|
|
41
|
+
/**
|
|
42
|
+
* Closes a cached database and removes it from the cache. Intended for test teardown; a
|
|
43
|
+
* process that is exiting does not need to call it.
|
|
44
|
+
*/
|
|
45
|
+
export declare function closeDuckDatabase(database?: string): Promise<void>;
|
|
46
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/teal-frame/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAI5E;;;;;EAKE;AACF,wBAAgB,UAAU,CAAC,QAAQ,SAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAEtE;AAuBD;;;;;;EAME;AACF,wBAAsB,qBAAqB,CACvC,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;;;;;;;;EAUE;AACF,wBAAsB,sBAAsB,CACxC,IAAI,EAAE,kBAAkB,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;;;;EAME;AACF,wBAAsB,uBAAuB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhF;AAED;;;EAGE;AACF,wBAAsB,iBAAiB,CAAC,QAAQ,SAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAc5E"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { DuckContext } from './DuckContext.js';
|
|
2
|
+
const contexts = new Map();
|
|
3
|
+
/**
|
|
4
|
+
* Returns the context for a database path, creating it on first use and caching it per path.
|
|
5
|
+
*
|
|
6
|
+
* `:memory:` is the process-wide default. Any other path is a file-backed database, which is
|
|
7
|
+
* also how a test gets an isolated catalog.
|
|
8
|
+
*/
|
|
9
|
+
export function getContext(database = ':memory:') {
|
|
10
|
+
return contexts.get(database) ?? openContext(database);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Opens and caches a context, and removes it from the cache if opening fails.
|
|
14
|
+
*
|
|
15
|
+
* Otherwise a failed open would stay cached, and every later call for that database would
|
|
16
|
+
* rethrow the same error for the life of the process. A failure such as a missing extension
|
|
17
|
+
* must be retryable once its cause is fixed.
|
|
18
|
+
*/
|
|
19
|
+
function openContext(database, settings = {}) {
|
|
20
|
+
const created = DuckContext.create(database, settings);
|
|
21
|
+
contexts.set(database, created);
|
|
22
|
+
// This only handles a branch; every caller awaiting `created` still receives the rejection.
|
|
23
|
+
created.catch(() => {
|
|
24
|
+
if (contexts.get(database) === created)
|
|
25
|
+
contexts.delete(database);
|
|
26
|
+
});
|
|
27
|
+
return created;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Opens or reconfigures a database, and resolves once the settings are applied.
|
|
31
|
+
*
|
|
32
|
+
* Call it once at startup, for example to give DuckDB a directory to spill to:
|
|
33
|
+
* `configureDuckDatabase({ tempDirectory: '/var/tmp/duck', memoryLimit: '48GB' })`.
|
|
34
|
+
* Calling it on a database that is already open updates the settings in place.
|
|
35
|
+
*/
|
|
36
|
+
export async function configureDuckDatabase(options = {}) {
|
|
37
|
+
const { database, ...settings } = options;
|
|
38
|
+
const existing = contexts.get(database ?? ':memory:');
|
|
39
|
+
if (existing) {
|
|
40
|
+
await (await existing).applySettings(settings);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
await openContext(database ?? ':memory:', settings);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Registers a scalar function (UDF) so SQL can call a data-mate function's JavaScript
|
|
47
|
+
* implementation.
|
|
48
|
+
*
|
|
49
|
+
* This is how a data-mate function without a native SQL translation runs inside a query.
|
|
50
|
+
* Calling the JavaScript implementation guarantees the same results as `DataFrame`, whereas
|
|
51
|
+
* DuckDB's own casts and functions often differ from it on edge cases.
|
|
52
|
+
*
|
|
53
|
+
* Registration is instance-wide, so the function is available to every frame and every
|
|
54
|
+
* stream on that database. Returns the function's name.
|
|
55
|
+
*/
|
|
56
|
+
export async function registerScalarFunction(spec) {
|
|
57
|
+
const { database, ...fnSpec } = spec;
|
|
58
|
+
(await getContext(database)).registerFunction(fnSpec);
|
|
59
|
+
return fnSpec.name;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The number of scalar functions registered on a database.
|
|
63
|
+
*
|
|
64
|
+
* DuckDB cannot unregister a function, so this grows with the functions and data types in use
|
|
65
|
+
* (never with their arguments; see `scalar-function.ts`). A long-running process may want to
|
|
66
|
+
* report it as a metric.
|
|
67
|
+
*/
|
|
68
|
+
export async function registeredFunctionCount(database) {
|
|
69
|
+
return (await getContext(database)).functionCount;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Closes a cached database and removes it from the cache. Intended for test teardown; a
|
|
73
|
+
* process that is exiting does not need to call it.
|
|
74
|
+
*/
|
|
75
|
+
export async function closeDuckDatabase(database = ':memory:') {
|
|
76
|
+
const context = contexts.get(database);
|
|
77
|
+
if (!context)
|
|
78
|
+
return;
|
|
79
|
+
contexts.delete(database);
|
|
80
|
+
let opened;
|
|
81
|
+
try {
|
|
82
|
+
opened = await context;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// The open failed: its error went to the caller that opened it, and `create` already
|
|
86
|
+
// closed the instance, so there is nothing left to close.
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
opened.disconnect();
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/teal-frame/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;AAEzD;;;;;EAKE;AACF,MAAM,UAAU,UAAU,CAAC,QAAQ,GAAG,UAAU;IAC5C,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;EAME;AACF,SAAS,WAAW,CAChB,QAAgB,EAChB,WAAiC,EAAE;IAEnC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEhC,4FAA4F;IAC5F,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;QACf,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO;YAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;;EAME;AACF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACvC,UAA+B,EAAE;IAEjC,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC;IAEtD,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO;IACX,CAAC;IAED,MAAM,WAAW,CAAC,QAAQ,IAAI,UAAU,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;EAUE;AACF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,IAAgD;IAEhD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC;AACvB,CAAC;AAED;;;;;;EAME;AACF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAAiB;IAC3D,OAAO,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACtD,CAAC;AAED;;;EAGE;AACF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAQ,GAAG,UAAU;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE1B,IAAI,MAAmB,CAAC;IACxB,IAAI,CAAC;QACD,MAAM,GAAG,MAAM,OAAO,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACL,qFAAqF;QACrF,0DAA0D;QAC1D,OAAO;IACX,CAAC;IACD,MAAM,CAAC,UAAU,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { DuckDBStructValue } from '@duckdb/node-api';
|
|
2
|
+
/**
|
|
3
|
+
* How TealFrame stores a `Date` field, matching what `DataFrame` holds.
|
|
4
|
+
*
|
|
5
|
+
* `DataFrame` stores epoch milliseconds, or a `DateTuple` (`[epochMillis, offsetMinutes]`) once
|
|
6
|
+
* `setTimezone`, `toTimeZone` or `toTimeZoneUsingLocation` has attached a display offset. The
|
|
7
|
+
* choice is made per value. Here every `Date` column has one type:
|
|
8
|
+
*
|
|
9
|
+
* STRUCT(ms BIGINT, tz_offset SMALLINT) tz_offset is NULL unless an offset was set
|
|
10
|
+
*
|
|
11
|
+
* With one shape for every date, readers never need to know whether an earlier step attached an
|
|
12
|
+
* offset. A date without an offset renders with a `Z` suffix.
|
|
13
|
+
*
|
|
14
|
+
* Compared with a TIMESTAMP column, the file is about a third smaller (milliseconds compress
|
|
15
|
+
* better than microseconds) and range filters and writes are faster. Date functions pay a small
|
|
16
|
+
* cost for the per-row offset check.
|
|
17
|
+
*
|
|
18
|
+
* DuckDB does not treat a number as a date (`hour(BIGINT)` does not bind and there is no
|
|
19
|
+
* BIGINT to TIMESTAMP cast), so every date expression wraps the member in `epoch_ms(...)`.
|
|
20
|
+
*/
|
|
21
|
+
export declare const DATE_MS = "ms";
|
|
22
|
+
export declare const DATE_OFFSET = "tz_offset";
|
|
23
|
+
export declare const DATE_TYPE: import("@duckdb/node-api").DuckDBStructType;
|
|
24
|
+
/**
|
|
25
|
+
* Converts a JS date value to the struct. Accepts epoch millis (what `coerceToType` produces for
|
|
26
|
+
* a plain date) or a `DateTuple`, whose offset is kept.
|
|
27
|
+
*/
|
|
28
|
+
export declare function toDateValue(value: unknown): DuckDBStructValue | null;
|
|
29
|
+
/** Converts the struct back to `DataFrame`'s form: a `DateTuple`, or plain epoch millis. */
|
|
30
|
+
export declare function fromDateValue(value: unknown): unknown;
|
|
31
|
+
/**
|
|
32
|
+
* Renders a plain `{ ms, tz_offset }` object (the struct after `toPlainValue`) the way
|
|
33
|
+
* `DataFrame`'s `toISO8601` renders the same value. Other values are returned unchanged.
|
|
34
|
+
*/
|
|
35
|
+
export declare function renderPlainDate(value: unknown): unknown;
|
|
36
|
+
/** SQL for the instant as a TIMESTAMP, for date functions that ignore the offset. */
|
|
37
|
+
export declare function instantSQL(accessor: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* SQL for the local wall time as a TIMESTAMP: the instant shifted by the offset, or the instant
|
|
40
|
+
* itself when there is none. This matches `getValidDateWithTimezone`, which `DataFrame`'s date
|
|
41
|
+
* functions use on a `DateTuple`. The per-row offset check is a single `coalesce`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function localSQL(accessor: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* SQL that turns a TIMESTAMP back into a date value with no offset. In `DataFrame`, a date
|
|
46
|
+
* function that returns a date also returns plain epoch millis, even for tuple input.
|
|
47
|
+
*/
|
|
48
|
+
export declare function fromTimestampSQL(expression: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* SQL that renders the date as JSON text, byte-for-byte equal to `toISO8601`. A missing or zero
|
|
51
|
+
* offset renders as UTC with a `Z`; any other offset renders the local wall time followed by
|
|
52
|
+
* `+HH:MM` or `-HH:MM`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function dateJson(accessor: string): string;
|
|
55
|
+
//# sourceMappingURL=date-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-value.d.ts","sourceRoot":"","sources":["../../../src/teal-frame/date-value.ts"],"names":[],"mappings":"AAAA,OAAO,EACuB,iBAAiB,EAC9C,MAAM,kBAAkB,CAAC;AAI1B;;;;;;;;;;;;;;;;;;EAkBE;AAEF,eAAO,MAAM,OAAO,OAAO,CAAC;AAC5B,eAAO,MAAM,WAAW,cAAc,CAAC;AAKvC,eAAO,MAAM,SAAS,6CAAyD,CAAC;AAEhF;;;EAGE;AACF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CASpE;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQrD;AAED;;;EAGE;AACF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASvD;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;EAIE;AACF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;EAGE;AACF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED;;;;EAIE;AACF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWjD"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { BIGINT, SMALLINT, STRUCT, structValue, } from '@duckdb/node-api';
|
|
2
|
+
import { isDateTuple, toISO8601 } from '@terascope/core-utils';
|
|
3
|
+
import { quoteLiteral } from '@terascope/sql-builder';
|
|
4
|
+
/**
|
|
5
|
+
* How TealFrame stores a `Date` field, matching what `DataFrame` holds.
|
|
6
|
+
*
|
|
7
|
+
* `DataFrame` stores epoch milliseconds, or a `DateTuple` (`[epochMillis, offsetMinutes]`) once
|
|
8
|
+
* `setTimezone`, `toTimeZone` or `toTimeZoneUsingLocation` has attached a display offset. The
|
|
9
|
+
* choice is made per value. Here every `Date` column has one type:
|
|
10
|
+
*
|
|
11
|
+
* STRUCT(ms BIGINT, tz_offset SMALLINT) tz_offset is NULL unless an offset was set
|
|
12
|
+
*
|
|
13
|
+
* With one shape for every date, readers never need to know whether an earlier step attached an
|
|
14
|
+
* offset. A date without an offset renders with a `Z` suffix.
|
|
15
|
+
*
|
|
16
|
+
* Compared with a TIMESTAMP column, the file is about a third smaller (milliseconds compress
|
|
17
|
+
* better than microseconds) and range filters and writes are faster. Date functions pay a small
|
|
18
|
+
* cost for the per-row offset check.
|
|
19
|
+
*
|
|
20
|
+
* DuckDB does not treat a number as a date (`hour(BIGINT)` does not bind and there is no
|
|
21
|
+
* BIGINT to TIMESTAMP cast), so every date expression wraps the member in `epoch_ms(...)`.
|
|
22
|
+
*/
|
|
23
|
+
export const DATE_MS = 'ms';
|
|
24
|
+
export const DATE_OFFSET = 'tz_offset';
|
|
25
|
+
/** Milliseconds in a minute, for turning an offset into a shift. */
|
|
26
|
+
const MINUTE_MS = 60_000;
|
|
27
|
+
export const DATE_TYPE = STRUCT({ [DATE_MS]: BIGINT, [DATE_OFFSET]: SMALLINT });
|
|
28
|
+
/**
|
|
29
|
+
* Converts a JS date value to the struct. Accepts epoch millis (what `coerceToType` produces for
|
|
30
|
+
* a plain date) or a `DateTuple`, whose offset is kept.
|
|
31
|
+
*/
|
|
32
|
+
export function toDateValue(value) {
|
|
33
|
+
if (value == null)
|
|
34
|
+
return null;
|
|
35
|
+
const [millis, offset] = isDateTuple(value) ? value : [Number(value), null];
|
|
36
|
+
if (!Number.isFinite(millis))
|
|
37
|
+
return null;
|
|
38
|
+
return structValue({
|
|
39
|
+
[DATE_MS]: BigInt(Math.trunc(millis)),
|
|
40
|
+
[DATE_OFFSET]: offset,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/** Converts the struct back to `DataFrame`'s form: a `DateTuple`, or plain epoch millis. */
|
|
44
|
+
export function fromDateValue(value) {
|
|
45
|
+
const entries = value?.entries;
|
|
46
|
+
if (entries == null)
|
|
47
|
+
return value;
|
|
48
|
+
const millis = entries[DATE_MS];
|
|
49
|
+
if (millis == null)
|
|
50
|
+
return null;
|
|
51
|
+
const offset = entries[DATE_OFFSET];
|
|
52
|
+
return offset == null ? Number(millis) : [Number(millis), Number(offset)];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Renders a plain `{ ms, tz_offset }` object (the struct after `toPlainValue`) the way
|
|
56
|
+
* `DataFrame`'s `toISO8601` renders the same value. Other values are returned unchanged.
|
|
57
|
+
*/
|
|
58
|
+
export function renderPlainDate(value) {
|
|
59
|
+
if (value == null || typeof value !== 'object' || Array.isArray(value))
|
|
60
|
+
return value;
|
|
61
|
+
const record = value;
|
|
62
|
+
if (!(DATE_MS in record))
|
|
63
|
+
return value;
|
|
64
|
+
const millis = record[DATE_MS];
|
|
65
|
+
if (millis == null)
|
|
66
|
+
return null;
|
|
67
|
+
const offset = record[DATE_OFFSET];
|
|
68
|
+
return toISO8601(offset == null ? Number(millis) : [Number(millis), Number(offset)]);
|
|
69
|
+
}
|
|
70
|
+
/** SQL for the instant as a TIMESTAMP, for date functions that ignore the offset. */
|
|
71
|
+
export function instantSQL(accessor) {
|
|
72
|
+
return `epoch_ms(${accessor}.${DATE_MS})`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* SQL for the local wall time as a TIMESTAMP: the instant shifted by the offset, or the instant
|
|
76
|
+
* itself when there is none. This matches `getValidDateWithTimezone`, which `DataFrame`'s date
|
|
77
|
+
* functions use on a `DateTuple`. The per-row offset check is a single `coalesce`.
|
|
78
|
+
*/
|
|
79
|
+
export function localSQL(accessor) {
|
|
80
|
+
return `epoch_ms(${accessor}.${DATE_MS} + coalesce(${accessor}.${DATE_OFFSET}, 0) * ${MINUTE_MS})`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* SQL that turns a TIMESTAMP back into a date value with no offset. In `DataFrame`, a date
|
|
84
|
+
* function that returns a date also returns plain epoch millis, even for tuple input.
|
|
85
|
+
*/
|
|
86
|
+
export function fromTimestampSQL(expression) {
|
|
87
|
+
return `CASE WHEN (${expression}) IS NULL THEN NULL ELSE`
|
|
88
|
+
+ ` {'${DATE_MS}': epoch_ms(${expression}), '${DATE_OFFSET}': NULL::SMALLINT} END`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* SQL that renders the date as JSON text, byte-for-byte equal to `toISO8601`. A missing or zero
|
|
92
|
+
* offset renders as UTC with a `Z`; any other offset renders the local wall time followed by
|
|
93
|
+
* `+HH:MM` or `-HH:MM`.
|
|
94
|
+
*/
|
|
95
|
+
export function dateJson(accessor) {
|
|
96
|
+
const offset = `${accessor}.${DATE_OFFSET}`;
|
|
97
|
+
const utc = `strftime(${instantSQL(accessor)}, ${quoteLiteral('%Y-%m-%dT%H:%M:%S.%gZ')})`;
|
|
98
|
+
const local = `strftime(${localSQL(accessor)}, ${quoteLiteral('%Y-%m-%dT%H:%M:%S.%g')})`;
|
|
99
|
+
const sign = `CASE WHEN ${offset} < 0 THEN '-' ELSE '+' END`;
|
|
100
|
+
const pad = (part) => `lpad(CAST(${part} AS VARCHAR), 2, '0')`;
|
|
101
|
+
const zone = `${sign} || ${pad(`abs(${offset}) // 60`)} || ':' || ${pad(`abs(${offset}) % 60`)}`;
|
|
102
|
+
return `to_json(CASE WHEN ${accessor}.${DATE_MS} IS NULL THEN NULL`
|
|
103
|
+
+ ` WHEN coalesce(${offset}, 0) = 0 THEN ${utc}`
|
|
104
|
+
+ ` ELSE ${local} || ${zone} END)::VARCHAR`;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=date-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-value.js","sourceRoot":"","sources":["../../../src/teal-frame/date-value.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FrameConfig } from './interfaces.js';
|
|
2
|
+
export declare function deepSelectSQL(from: string, columns: readonly string[], config: FrameConfig, selectors: readonly string[]): {
|
|
3
|
+
sql: string;
|
|
4
|
+
config: FrameConfig;
|
|
5
|
+
columns: string[];
|
|
6
|
+
};
|
|
7
|
+
export declare function emptySkippedObjects(config: FrameConfig): string[];
|
|
8
|
+
//# sourceMappingURL=deep-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-select.d.ts","sourceRoot":"","sources":["../../../src/teal-frame/deep-select.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAsH9C,wBAAgB,aAAa,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC7B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA+BzD;AAWD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAQjE"}
|