@@ -12,6 +12,21 @@ const PARAMS_TYPE = {
1212} ;
1313
1414const RESPONSES_RESULT = {
15+ NULL : 0 ,
16+ BOOL : 1 ,
17+ U8INT : 2 ,
18+ U16INT : 3 ,
19+ U32INT : 4 ,
20+ U64INT : 5 ,
21+ S8INT : 6 ,
22+ S16INT : 7 ,
23+ S32INT : 8 ,
24+ S64INT : 9 ,
25+ FLOAT32 : 10 ,
26+ FLOAT64 : 11 ,
27+ BINARY : 12 ,
28+ STRING : 13 ,
29+ LIST : 14 ,
1530 ERROR : 0x10 ,
1631 ROW : 0x11 ,
1732 EMPTY : 0x12 ,
@@ -23,6 +38,10 @@ const HANDSHAKE_RESULT = {
2338 ERROR : 'H01' ,
2439} ;
2540
41+ function isResponsesResult ( type : number ) : boolean {
42+ return Object . values ( RESPONSES_RESULT ) . includes ( type ) ;
43+ }
44+
2645function isFloat ( number : number | string ) : boolean {
2746 return Number . isFinite ( number ) && ! Number . isInteger ( number ) ;
2847}
@@ -114,31 +133,31 @@ function parseSkytableData(buffer: Buffer): Column[] {
114133 buffer = buffer . subarray ( 1 ) ;
115134
116135 switch ( type ) {
117- case 0 : // Null
136+ case RESPONSES_RESULT . NULL : // Null
118137 return parseNext ( null , buffer . subarray ( 0 ) ) ;
119- case 1 : // Bool
138+ case RESPONSES_RESULT . BOOL : // Bool
120139 return parseNext ( Boolean ( buffer . readUInt8 ( 0 ) ) , buffer . subarray ( 1 ) ) ;
121- case 2 : // 8-bit Unsigned Integer
140+ case RESPONSES_RESULT . U8INT : // 8-bit Unsigned Integer
122141 return parseNumberNext ( Number , buffer ) ;
123- case 3 : // 16-bit Unsigned Integer
142+ case RESPONSES_RESULT . U16INT : // 16-bit Unsigned Integer
124143 return parseNumberNext ( Number , buffer ) ;
125- case 4 : // 32-bit Unsigned Integer
144+ case RESPONSES_RESULT . U32INT : // 32-bit Unsigned Integer
126145 return parseNumberNext ( Number , buffer ) ;
127- case 5 : // 64-bit Unsigned Integer
146+ case RESPONSES_RESULT . U64INT : // 64-bit Unsigned Integer
128147 return parseNumberNext < bigint > ( BigInt , buffer ) ;
129- case 6 : // 8-bit Signed Integer
148+ case RESPONSES_RESULT . S8INT : // 8-bit Signed Integer
130149 return parseNumberNext ( Number , buffer ) ;
131- case 7 : // 16-bit Signed Integer
150+ case RESPONSES_RESULT . S16INT : // 16-bit Signed Integer
132151 return parseNumberNext ( Number , buffer ) ;
133- case 8 : // 32-bit Signed Integer
152+ case RESPONSES_RESULT . S32INT : // 32-bit Signed Integer
134153 return parseNumberNext ( Number , buffer ) ;
135- case 9 : // 64-bit Signed Integer
154+ case RESPONSES_RESULT . S64INT : // 64-bit Signed Integer
136155 return parseNumberNext < bigint > ( BigInt , buffer ) ;
137- case 10 : // f32
156+ case RESPONSES_RESULT . FLOAT32 : // f32
138157 return parseNumberNext ( Number . parseFloat , buffer ) ;
139- case 11 : // f64
158+ case RESPONSES_RESULT . FLOAT64 : // f64
140159 return parseNumberNext ( Number . parseFloat , buffer ) ;
141- case 12 : {
160+ case RESPONSES_RESULT . BINARY : {
142161 // Binary <size>\n<payload>,
143162 const sizeOffset = getFirstSplitOffset ( buffer ) ;
144163 const size = Number ( buffer . subarray ( 0 , sizeOffset ) . toString ( 'utf-8' ) ) ;
@@ -149,7 +168,7 @@ function parseSkytableData(buffer: Buffer): Column[] {
149168
150169 return parseNext ( buffer . subarray ( start , end ) , buffer . subarray ( end ) ) ;
151170 }
152- case 13 : {
171+ case RESPONSES_RESULT . STRING : {
153172 // String <size>\n<body>
154173 const sizeOffset = getFirstSplitOffset ( buffer ) ;
155174 const size = Number ( buffer . subarray ( 0 , sizeOffset ) . toString ( 'utf-8' ) ) ;
@@ -158,7 +177,7 @@ function parseSkytableData(buffer: Buffer): Column[] {
158177
159178 return parseNext ( str , buffer . subarray ( end ) ) ;
160179 }
161- case 14 : {
180+ case RESPONSES_RESULT . LIST : {
162181 // List <size>\n<body>
163182 const sizeOffset = getFirstSplitOffset ( buffer ) ;
164183 const size = Number ( buffer . subarray ( 0 , sizeOffset ) . toString ( 'utf-8' ) ) ;
@@ -219,6 +238,11 @@ export function formatResponse(buffer: Buffer): QueryResult {
219238 `response error code: ${ buffer . subarray ( 1 , 2 ) . readInt8 ( ) } ` ,
220239 ) ;
221240 default :
241+ if ( isResponsesResult ( type ) ) {
242+ const result = parseSkytableData ( buffer ) ;
243+ // FIXME to be better
244+ return result ?. [ 0 ] ;
245+ }
222246 throw new TypeError ( 'unknown response type' ) ;
223247 }
224248}
0 commit comments