Skip to content

Commit

Permalink
feat: Fix conversion of buffer to Boolean (#240)
Browse files Browse the repository at this point in the history
* feat: Fix conversion of buffer to Boolean

Calling the Boolean constructor on a Buffer object always returns true regardless if the value is true or not.  This is noticeable when
Creating a query using the ST_CONTAINS function as a column in a select statement.
For example,

SELECT id, name ST_CONTAINS(omnisci_geo, ST_GeomFromText(‘POINT(-87.3592959471789 35.0011799880309)’, 4326) from omnisci_states

Should return true for only Tennessee however, it returns true for each state

* added package-lock.json

* Changed booleanToBuffer to valueToBoolean to be safer, added conversion code to process-row-results.js, removed test from helpers.unit.spec.js
  • Loading branch information
Dynee authored Nov 2, 2021
1 parent 7bd4ed5 commit 2f72d3a
Show file tree
Hide file tree
Showing 6 changed files with 15,908 additions and 47 deletions.
24 changes: 19 additions & 5 deletions dist/browser-connector.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ module.exports = function availableTypedArrays() {
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Dq": () => /* binding */ convertObjectToThriftCopyParams,
/* harmony export */ "HP": () => /* binding */ mutateThriftRowDesc,
/* harmony export */ "RK": () => /* binding */ timestampToMs
/* harmony export */ "RK": () => /* binding */ timestampToMs,
/* harmony export */ "kS": () => /* binding */ valueToBoolean
/* harmony export */ });
/* harmony import */ var _thrift_omnisci_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(356);
/* harmony import */ var _thrift_omnisci_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_thrift_omnisci_types__WEBPACK_IMPORTED_MODULE_0__);
Expand Down Expand Up @@ -116,6 +117,19 @@ function timestampToMs(timestamp, precision) {
var timeInMs = timestamp / divisor;
return timeInMs;
}
/**
* Converts a Number/BigInt value to a Boolean
* @param {BigInt} value - A BigInt value
* @returns {Boolean} The equivalent boolean value representing the buffer
*/

function valueToBoolean(value) {
if (value.toNumber) {
return Boolean(value.toNumber(true));
}

return Boolean(value);
}

/***/ }),

Expand Down Expand Up @@ -1546,7 +1560,7 @@ function processColumnarResults(data, eliminateNullRows, dataEnum) {

switch (fieldType) {
case "BOOL":
row[fieldName].push(Boolean(data.columns[_c].data.arr_col[r].data.int_col[e]));
row[fieldName].push((0,helpers/* valueToBoolean */.kS)(data.columns[_c].data.arr_col[r].data.int_col[e]));
break;

case "SMALLINT":
Expand Down Expand Up @@ -1581,7 +1595,7 @@ function processColumnarResults(data, eliminateNullRows, dataEnum) {
// Not an array
switch (fieldType) {
case "BOOL":
row[fieldName] = Boolean(data.columns[_c].data.int_col[r]);
row[fieldName] = (0,helpers/* valueToBoolean */.kS)(data.columns[_c].data.int_col[r]);
break;

case "SMALLINT":
Expand Down Expand Up @@ -1703,7 +1717,7 @@ function processRowResults(data, eliminateNullRows, datumEnum) {

switch (fieldType) {
case "BOOL":
row[fieldName].push(Boolean(elemDatum.val.int_val));
row[fieldName].push((0,helpers/* valueToBoolean */.kS)(elemDatum.val.int_val));
break;

case "SMALLINT":
Expand Down Expand Up @@ -1744,7 +1758,7 @@ function processRowResults(data, eliminateNullRows, datumEnum) {

switch (fieldType) {
case "BOOL":
row[fieldName] = Boolean(scalarDatum.val.int_val);
row[fieldName] = (0,helpers/* valueToBoolean */.kS)(scalarDatum.val.int_val);
break;

case "SMALLINT":
Expand Down
24 changes: 19 additions & 5 deletions dist/node-connector.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ module.exports = Queue;
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Dq": () => /* binding */ convertObjectToThriftCopyParams,
/* harmony export */ "HP": () => /* binding */ mutateThriftRowDesc,
/* harmony export */ "RK": () => /* binding */ timestampToMs
/* harmony export */ "RK": () => /* binding */ timestampToMs,
/* harmony export */ "kS": () => /* binding */ valueToBoolean
/* harmony export */ });
/* harmony import */ var _thrift_omnisci_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(356);
/* harmony import */ var _thrift_omnisci_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_thrift_omnisci_types__WEBPACK_IMPORTED_MODULE_0__);
Expand Down Expand Up @@ -121,6 +122,19 @@ function timestampToMs(timestamp, precision) {
var timeInMs = timestamp / divisor;
return timeInMs;
}
/**
* Converts a Number/BigInt value to a Boolean
* @param {BigInt} value - A BigInt value
* @returns {Boolean} The equivalent boolean value representing the buffer
*/

function valueToBoolean(value) {
if (value.toNumber) {
return Boolean(value.toNumber(true));
}

return Boolean(value);
}

/***/ }),

Expand Down Expand Up @@ -1565,7 +1579,7 @@ function processColumnarResults(data, eliminateNullRows, dataEnum) {

switch (fieldType) {
case "BOOL":
row[fieldName].push(Boolean(data.columns[_c].data.arr_col[r].data.int_col[e]));
row[fieldName].push((0,helpers/* valueToBoolean */.kS)(data.columns[_c].data.arr_col[r].data.int_col[e]));
break;

case "SMALLINT":
Expand Down Expand Up @@ -1600,7 +1614,7 @@ function processColumnarResults(data, eliminateNullRows, dataEnum) {
// Not an array
switch (fieldType) {
case "BOOL":
row[fieldName] = Boolean(data.columns[_c].data.int_col[r]);
row[fieldName] = (0,helpers/* valueToBoolean */.kS)(data.columns[_c].data.int_col[r]);
break;

case "SMALLINT":
Expand Down Expand Up @@ -1722,7 +1736,7 @@ function processRowResults(data, eliminateNullRows, datumEnum) {

switch (fieldType) {
case "BOOL":
row[fieldName].push(Boolean(elemDatum.val.int_val));
row[fieldName].push((0,helpers/* valueToBoolean */.kS)(elemDatum.val.int_val));
break;

case "SMALLINT":
Expand Down Expand Up @@ -1763,7 +1777,7 @@ function processRowResults(data, eliminateNullRows, datumEnum) {

switch (fieldType) {
case "BOOL":
row[fieldName] = Boolean(scalarDatum.val.int_val);
row[fieldName] = (0,helpers/* valueToBoolean */.kS)(scalarDatum.val.int_val);
break;

case "SMALLINT":
Expand Down
Loading

0 comments on commit 2f72d3a

Please sign in to comment.