* Writes v1 and v2 execute query parameters * @param {FrameWriter} frameWriter * @param {Encoder} encoder * @param {Boolean} [isQuery] True if query, otherwise assumed to be execute request.
(frameWriter, encoder, isQuery)
| 168 | * @param {Boolean} [isQuery] True if query, otherwise assumed to be execute request. |
| 169 | */ |
| 170 | writeQueryParameters(frameWriter, encoder, isQuery) { |
| 171 | //v1: <n><value_1>....<value_n><consistency> |
| 172 | //v2: <consistency><flags>[<n><value_1>...<value_n>][<result_page_size>][<paging_state>][<serial_consistency>] |
| 173 | //v3: <consistency><flags>[<n>[name_1]<value_1>...[name_n]<value_n>][<result_page_size>][<paging_state>][<serial_consistency>][<timestamp>] |
| 174 | //dse_v1: <consistency><flags>[<n>[name_1]<value_1>...[name_n]<value_n>][<result_page_size>][<paging_state>] |
| 175 | // [<serial_consistency>][<timestamp>][continuous_paging_options] |
| 176 | //dse_v2: <consistency><flags>[<n>[name_1]<value_1>...[name_n]<value_n>][<result_page_size>][<paging_state>] |
| 177 | // [<serial_consistency>][<timestamp>][keyspace][continuous_paging_options] |
| 178 | let flags = 0; |
| 179 | |
| 180 | const timestamp = this.timestamp; |
| 181 | |
| 182 | if (types.protocolVersion.supportsPaging(encoder.protocolVersion)) { |
| 183 | flags |= (this.params && this.params.length) ? queryFlag.values : 0; |
| 184 | flags |= (this.options.getFetchSize() > 0) ? queryFlag.pageSize : 0; |
| 185 | flags |= this.options.getPageState() ? queryFlag.withPagingState : 0; |
| 186 | flags |= this.options.getSerialConsistency() ? queryFlag.withSerialConsistency : 0; |
| 187 | flags |= timestamp !== null && timestamp !== undefined ? queryFlag.withDefaultTimestamp : 0; |
| 188 | flags |= this.namedParameters ? queryFlag.withNameForValues : 0; |
| 189 | |
| 190 | // Don't inject keyspace for EXECUTE requests as inherited from prepared statement. |
| 191 | const supportsKeyspace = isQuery && types.protocolVersion.supportsKeyspaceInRequest(encoder.protocolVersion); |
| 192 | flags |= supportsKeyspace && this.options.getKeyspace() ? queryFlag.withKeyspace : 0; |
| 193 | |
| 194 | frameWriter.writeShort(this.consistency); |
| 195 | if (types.protocolVersion.uses4BytesQueryFlags(encoder.protocolVersion)) { |
| 196 | frameWriter.writeInt(flags); |
| 197 | } |
| 198 | else { |
| 199 | frameWriter.writeByte(flags); |
| 200 | } |
| 201 | } |
| 202 | |
| 203 | if (this.params && this.params.length) { |
| 204 | frameWriter.writeShort(this.params.length); |
| 205 | for (let i = 0; i < this.params.length; i++) { |
| 206 | let paramValue = this.params[i]; |
| 207 | if (flags & queryFlag.withNameForValues) { |
| 208 | //parameter is composed by name / value |
| 209 | frameWriter.writeString(paramValue.name); |
| 210 | paramValue = paramValue.value; |
| 211 | } |
| 212 | frameWriter.writeBytes(encoder.encode(paramValue, this.getParamType(i))); |
| 213 | } |
| 214 | } |
| 215 | |
| 216 | if (!types.protocolVersion.supportsPaging(encoder.protocolVersion)) { |
| 217 | if (!this.params || !this.params.length) { |
| 218 | //zero parameters |
| 219 | frameWriter.writeShort(0); |
| 220 | } |
| 221 | frameWriter.writeShort(this.consistency); |
| 222 | return; |
| 223 | } |
| 224 | if (flags & queryFlag.pageSize) { |
| 225 | frameWriter.writeInt(this.options.getFetchSize()); |
| 226 | } |
| 227 | if (flags & queryFlag.withPagingState) { |
no test coverage detected