UNPKG

snowflake-sdk

Version:
265 lines (237 loc) 6.54 kB
/* * Copyright (c) 2015-2024 Snowflake Computing Inc. All rights reserved. */ const Util = require('../../util'); const Errors = require('../../errors'); const sqlTypes = { values: { TEXT: 'text', BINARY: 'binary', BOOLEAN: 'boolean', FIXED: 'fixed', REAL: 'real', DATE: 'date', TIME: 'time', TIMESTAMP_LTZ: 'timestamp_ltz', TIMESTAMP_NTZ: 'timestamp_ntz', TIMESTAMP_TZ: 'timestamp_tz', VARIANT: 'variant', OBJECT: 'object', ARRAY: 'array' }, /** * Determines if a column's SQL type is String. * * @param {Object} sqlType * * @returns {Boolean} */ isString: function (sqlType) { return (sqlType === this.values.TEXT); }, /** * Determines if a column's SQL type is Binary. * * @param {Object} sqlType * * @returns {Boolean} */ isBinary: function (sqlType) { return (sqlType === this.values.BINARY); }, /** * Determines if a column's SQL type is Boolean. * * @param {Object} sqlType * * @returns {Boolean} */ isBoolean: function (sqlType) { return (sqlType === this.values.BOOLEAN); }, /** * Determines if a column's SQL type is Number. * * @param {Object} sqlType * * @returns {Boolean} */ isNumber: function (sqlType) { return (sqlType === this.values.FIXED) || (sqlType === this.values.REAL); }, /** * Determines if a column's SQL type is Date. * * @param {Object} sqlType * * @returns {Boolean} */ isDate: function (sqlType) { return (sqlType === this.values.DATE); }, /** * Determines if a column's SQL type is Time. * * @param {Object} sqlType * * @returns {Boolean} */ isTime: function (sqlType) { return (sqlType === this.values.TIME); }, /** * Determines if a column's SQL type is Timestamp. * * @param {Object} sqlType * * @returns {Boolean} */ isTimestamp: function (sqlType) { return (sqlType === this.values.TIMESTAMP_LTZ) || (sqlType === this.values.TIMESTAMP_NTZ) || (sqlType === this.values.TIMESTAMP_TZ); }, /** * Determines if a column's SQL type is TIMESTAMP_LTZ. * * @param {Object} sqlType * * @returns {Boolean} */ isTimestampLtz: function (sqlType) { return (sqlType === this.values.TIMESTAMP_LTZ); }, /** * Determines if a column's SQL type is TIMESTAMP_NTZ. * * @param {Object} sqlType * * @returns {Boolean} */ isTimestampNtz: function (sqlType) { return (sqlType === this.values.TIMESTAMP_NTZ); }, /** * Determines if a column's SQL type is TIMESTAMP_TZ. * * @param {Object} sqlType * * @returns {Boolean} */ isTimestampTz: function (sqlType) { return (sqlType === this.values.TIMESTAMP_TZ); }, /** * Determines if a column's SQL type is Variant. * * @param {Object} sqlType * * @returns {Boolean} */ isVariant: function (sqlType) { return (sqlType === this.values.VARIANT) || (sqlType === this.values.OBJECT) || (sqlType === this.values.ARRAY); }, /** * Determines if a column's SQL type is Object. * * @param {Object} sqlType * * @returns {Boolean} */ isObject: function (sqlType) { return (sqlType === this.values.OBJECT); }, /** * Determines if a column's SQL type is Array. * * @param {Object} sqlType * * @returns {Boolean} */ isArray: function (sqlType) { return (sqlType === this.values.ARRAY); } }; const nativeTypes = { values: { STRING: 'STRING', BOOLEAN: 'BOOLEAN', NUMBER: 'NUMBER', DATE: 'DATE', JSON: 'JSON', BUFFER: 'BUFFER' }, /** * Determines if a given value is a valid native type. * * @param {*} value * * @returns {boolean} */ isValidValue: function (value) { return !!this.values[Util.isString(value) ? value.toUpperCase() : value]; }, /** * Given an array of strings, returns the index of the first element that * represents an invalid native type. If the values are all valid, a value of * -1 is returned. * * @param {String[]} nativeTypes * * @returns {Number} */ findInvalidValue: function (nativeTypes) { // validate input Errors.assertInternal(Util.isArray(nativeTypes)); // find the index of the first invalid value let invalidValueIndex = -1; for (let index = 0, length = nativeTypes.length; index < length; index++) { if (!this.isValidValue(nativeTypes[index])) { invalidValueIndex = index; break; } } return invalidValueIndex; } }; let isRepresentNullAsStringNull = true; exports.setIsRepresentNullAsStringNull = function (option) { isRepresentNullAsStringNull = option; }; exports.getNullValue = function () { return isRepresentNullAsStringNull ? 'NULL' : null; }; const sqlTypeValues = sqlTypes.values; const nativeTypeValues = nativeTypes.values; const MAP_SQL_TO_NATIVE = {}; MAP_SQL_TO_NATIVE[sqlTypeValues.TEXT] = nativeTypeValues.STRING; MAP_SQL_TO_NATIVE[sqlTypeValues.BINARY] = nativeTypeValues.BUFFER; MAP_SQL_TO_NATIVE[sqlTypeValues.BOOLEAN] = nativeTypeValues.BOOLEAN; MAP_SQL_TO_NATIVE[sqlTypeValues.FIXED] = nativeTypeValues.NUMBER; MAP_SQL_TO_NATIVE[sqlTypeValues.REAL] = nativeTypeValues.NUMBER; MAP_SQL_TO_NATIVE[sqlTypeValues.DATE] = nativeTypeValues.DATE; MAP_SQL_TO_NATIVE[sqlTypeValues.TIME] = nativeTypeValues.STRING; MAP_SQL_TO_NATIVE[sqlTypeValues.TIMESTAMP_LTZ] = nativeTypeValues.DATE; MAP_SQL_TO_NATIVE[sqlTypeValues.TIMESTAMP_NTZ] = nativeTypeValues.DATE; MAP_SQL_TO_NATIVE[sqlTypeValues.TIMESTAMP_TZ] = nativeTypeValues.DATE; MAP_SQL_TO_NATIVE[sqlTypeValues.VARIANT] = nativeTypeValues.JSON; MAP_SQL_TO_NATIVE[sqlTypeValues.OBJECT] = nativeTypeValues.JSON; MAP_SQL_TO_NATIVE[sqlTypeValues.ARRAY] = nativeTypeValues.JSON; exports.SqlTypes = sqlTypes; exports.NativeTypes = nativeTypes; /** * Given a SQL type, returns the corresponding native type. * * @param {String} sqlType * * @returns {String} */ exports.toNativeType = function (sqlType) { return MAP_SQL_TO_NATIVE[sqlType]; };