(typedParameters, variables)
| 79 | } |
| 80 | |
| 81 | resolveParameters(typedParameters, variables) { |
| 82 | const resolvedParameters = []; |
| 83 | for (const param of typedParameters) { |
| 84 | const type = param.type.toLowerCase(); |
| 85 | let value = param.value; |
| 86 | |
| 87 | if (typeof value === 'string') { |
| 88 | value = this.substituteVariables(value, variables); |
| 89 | } |
| 90 | |
| 91 | switch (type) { |
| 92 | case 'int4': |
| 93 | case 'int8': |
| 94 | resolvedParameters.push(parseInt(value)); |
| 95 | break; |
| 96 | case 'float4': |
| 97 | case 'float8': |
| 98 | resolvedParameters.push(parseFloat(value)); |
| 99 | break; |
| 100 | case 'boolean': |
| 101 | value = String(value).toLowerCase().trim(); |
| 102 | if (value === 'true') { |
| 103 | resolvedParameters.push(true); |
| 104 | } else if (value === 'false') { |
| 105 | resolvedParameters.push(false); |
| 106 | } else { |
| 107 | throw new Error(`Invalid boolean value: ${value}`); |
| 108 | } |
| 109 | break; |
| 110 | case 'varchar': |
| 111 | case 'char': |
| 112 | resolvedParameters.push(String(value)); |
| 113 | break; |
| 114 | case 'timestamp': |
| 115 | case 'date': |
| 116 | resolvedParameters.push(value); |
| 117 | break; |
| 118 | case 'array_float8': |
| 119 | // Handle floating point arrays like {-1, 2, 3, 4, 5.42} |
| 120 | if (typeof value === 'string') { |
| 121 | // Handle empty array case "{}" |
| 122 | if (value.trim() === '{}') { |
| 123 | resolvedParameters.push([]); |
| 124 | break; |
| 125 | } |
| 126 | |
| 127 | // Strip curly braces and split by comma |
| 128 | const strippedValue = value.replace(/^\{|\}$/g, ''); |
| 129 | // Convert each element to float, handling null values |
| 130 | const floatArray = strippedValue.split(',').map(item => { |
| 131 | const trimmedItem = item.trim(); |
| 132 | if (!trimmedItem) return undefined; |
| 133 | if (trimmedItem.toLowerCase() === 'null') return null; |
| 134 | return parseFloat(trimmedItem); |
| 135 | }).filter(item => item !== undefined); // Filter out undefined values |
| 136 | resolvedParameters.push(floatArray); |
| 137 | } |
| 138 | // If already an array, ensure all elements are floats or null |
no test coverage detected