@@ -2986,11 +2986,16 @@ static SQLRETURN statement_len_cbor(esodbc_stmt_st *stmt, size_t *enc_len,
29862986 bodylen += cbor_str_obj_len (version .cnt );
29872987 * keys += 4 ; /* field_m._val., idx._inc._frozen, time_zone, version */
29882988 }
2989+ /* mode */
29892990 bodylen += cbor_str_obj_len (sizeof (REQ_KEY_MODE ) - 1 );
29902991 bodylen += cbor_str_obj_len (sizeof (REQ_VAL_MODE ) - 1 );
2992+ /* client_id */
29912993 bodylen += cbor_str_obj_len (sizeof (REQ_KEY_CLT_ID ) - 1 );
29922994 bodylen += cbor_str_obj_len (sizeof (REQ_VAL_CLT_ID ) - 1 );
2993- * keys += 2 ; /* mode, client_id */
2995+ /* binary_format */
2996+ bodylen += cbor_str_obj_len (sizeof (REQ_KEY_BINARY_FMT ) - 1 );
2997+ bodylen += CBOR_OBJ_BOOL_LEN ;
2998+ * keys += 3 ; /* mode, client_id, binary_format */
29942999 /* TODO: request_/page_timeout */
29953000
29963001 * enc_len = bodylen ;
@@ -3048,8 +3053,10 @@ static SQLRETURN statement_len_json(esodbc_stmt_st *stmt, size_t *outlen)
30483053 bodylen += sizeof (JSON_KEY_VERSION ) - 1 ;
30493054 bodylen += version .cnt + /* 2x`"` */ 2 ;
30503055 }
3051- bodylen += sizeof (JSON_KEY_VAL_MODE ) - 1 ; /* "mode": "ODBC" */
3052- bodylen += sizeof (JSON_KEY_CLT_ID ) - 1 ; /* "client_id": "odbcXX" */
3056+ bodylen += sizeof (JSON_KEY_VAL_MODE ) - 1 ; /* "mode": */
3057+ bodylen += sizeof (JSON_KEY_CLT_ID ) - 1 ; /* "client_id": */
3058+ bodylen += sizeof (JSON_KEY_BINARY_FMT ) - 1 ; /* "binary_format": false */
3059+ bodylen += sizeof ("false" ) - 1 ;
30533060 /* TODO: request_/page_timeout */
30543061 bodylen += 1 ; /* } */
30553062
@@ -3342,6 +3349,11 @@ static SQLRETURN serialize_to_cbor(esodbc_stmt_st *stmt, cstr_st *dest,
33423349 err = cbor_encode_text_string (& map , REQ_VAL_CLT_ID ,
33433350 sizeof (REQ_VAL_CLT_ID ) - 1 );
33443351 FAIL_ON_CBOR_ERR (stmt , err );
3352+ /* binary_format: true (false means JSON) */
3353+ err = cbor_encode_text_string (& map , REQ_KEY_BINARY_FMT ,
3354+ sizeof (REQ_KEY_BINARY_FMT ) - 1 );
3355+ FAIL_ON_CBOR_ERR (stmt , err );
3356+ err = cbor_encode_boolean (& map , TRUE);
33453357
33463358 err = cbor_encoder_close_container (& encoder , & map );
33473359 FAIL_ON_CBOR_ERR (stmt , err );
@@ -3458,6 +3470,10 @@ static SQLRETURN serialize_to_json(esodbc_stmt_st *stmt, cstr_st *dest)
34583470 /* "client_id": "odbcXX" */
34593471 memcpy (body + pos , JSON_KEY_CLT_ID , sizeof (JSON_KEY_CLT_ID ) - 1 );
34603472 pos += sizeof (JSON_KEY_CLT_ID ) - 1 ;
3473+ /* "binary_format": false (true means CBOR) */
3474+ memcpy (body + pos , JSON_KEY_BINARY_FMT , sizeof (JSON_KEY_BINARY_FMT ) - 1 );
3475+ pos += sizeof (JSON_KEY_BINARY_FMT ) - 1 ;
3476+ pos += copy_bool_val (body + pos , FALSE);
34613477 body [pos ++ ] = '}' ;
34623478
34633479 /* check that the buffer hasn't been overrun. it can be used less than
0 commit comments