node-server-dev 3.1.5 → 3.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/browser.js +1 -1
- package/dist/cjs/getAllRouter/index.js +1 -1
- package/dist/cjs/hash/index.js +1 -1
- package/dist/cjs/id/index.js +1 -1
- package/dist/cjs/id/random.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/jwt/index.js +1 -1
- package/dist/cjs/mac/index.js +1 -1
- package/dist/cjs/package/mysql2/License +19 -0
- package/dist/cjs/package/mysql2/README.md +114 -0
- package/dist/cjs/package/mysql2/index.d.ts +1 -0
- package/dist/cjs/package/mysql2/index.js +77 -0
- package/dist/cjs/package/mysql2/lib/auth_41.js +95 -0
- package/dist/cjs/package/mysql2/lib/auth_plugins/caching_sha2_password.js +108 -0
- package/dist/cjs/package/mysql2/lib/auth_plugins/caching_sha2_password.md +18 -0
- package/dist/cjs/package/mysql2/lib/auth_plugins/index.js +8 -0
- package/dist/cjs/package/mysql2/lib/auth_plugins/mysql_clear_password.js +17 -0
- package/dist/cjs/package/mysql2/lib/auth_plugins/mysql_native_password.js +34 -0
- package/dist/cjs/package/mysql2/lib/auth_plugins/sha256_password.js +59 -0
- package/dist/cjs/package/mysql2/lib/base/connection.js +945 -0
- package/dist/cjs/package/mysql2/lib/base/pool.js +233 -0
- package/dist/cjs/package/mysql2/lib/base/pool_connection.js +63 -0
- package/dist/cjs/package/mysql2/lib/commands/auth_switch.js +111 -0
- package/dist/cjs/package/mysql2/lib/commands/binlog_dump.js +109 -0
- package/dist/cjs/package/mysql2/lib/commands/change_user.js +68 -0
- package/dist/cjs/package/mysql2/lib/commands/client_handshake.js +241 -0
- package/dist/cjs/package/mysql2/lib/commands/close_statement.js +18 -0
- package/dist/cjs/package/mysql2/lib/commands/command.js +54 -0
- package/dist/cjs/package/mysql2/lib/commands/execute.js +112 -0
- package/dist/cjs/package/mysql2/lib/commands/index.js +27 -0
- package/dist/cjs/package/mysql2/lib/commands/ping.js +36 -0
- package/dist/cjs/package/mysql2/lib/commands/prepare.js +143 -0
- package/dist/cjs/package/mysql2/lib/commands/query.js +329 -0
- package/dist/cjs/package/mysql2/lib/commands/quit.js +29 -0
- package/dist/cjs/package/mysql2/lib/commands/register_slave.js +27 -0
- package/dist/cjs/package/mysql2/lib/commands/server_handshake.js +203 -0
- package/dist/cjs/package/mysql2/lib/compressed_protocol.js +127 -0
- package/dist/cjs/package/mysql2/lib/connection.js +12 -0
- package/dist/cjs/package/mysql2/lib/connection_config.js +292 -0
- package/dist/cjs/package/mysql2/lib/constants/charset_encodings.js +316 -0
- package/dist/cjs/package/mysql2/lib/constants/charsets.js +317 -0
- package/dist/cjs/package/mysql2/lib/constants/client.js +39 -0
- package/dist/cjs/package/mysql2/lib/constants/commands.js +36 -0
- package/dist/cjs/package/mysql2/lib/constants/cursor.js +8 -0
- package/dist/cjs/package/mysql2/lib/constants/encoding_charset.js +49 -0
- package/dist/cjs/package/mysql2/lib/constants/errors.js +3973 -0
- package/dist/cjs/package/mysql2/lib/constants/field_flags.js +20 -0
- package/dist/cjs/package/mysql2/lib/constants/server_status.js +44 -0
- package/dist/cjs/package/mysql2/lib/constants/session_track.js +11 -0
- package/dist/cjs/package/mysql2/lib/constants/ssl_profiles.js +11 -0
- package/dist/cjs/package/mysql2/lib/constants/types.js +64 -0
- package/dist/cjs/package/mysql2/lib/create_connection.js +10 -0
- package/dist/cjs/package/mysql2/lib/create_pool.js +10 -0
- package/dist/cjs/package/mysql2/lib/create_pool_cluster.js +9 -0
- package/dist/cjs/package/mysql2/lib/helpers.js +86 -0
- package/dist/cjs/package/mysql2/lib/packet_parser.js +195 -0
- package/dist/cjs/package/mysql2/lib/packets/auth_next_factor.js +35 -0
- package/dist/cjs/package/mysql2/lib/packets/auth_switch_request.js +38 -0
- package/dist/cjs/package/mysql2/lib/packets/auth_switch_request_more_data.js +33 -0
- package/dist/cjs/package/mysql2/lib/packets/auth_switch_response.js +30 -0
- package/dist/cjs/package/mysql2/lib/packets/binary_row.js +95 -0
- package/dist/cjs/package/mysql2/lib/packets/binlog_dump.js +33 -0
- package/dist/cjs/package/mysql2/lib/packets/binlog_query_statusvars.js +115 -0
- package/dist/cjs/package/mysql2/lib/packets/change_user.js +97 -0
- package/dist/cjs/package/mysql2/lib/packets/close_statement.js +21 -0
- package/dist/cjs/package/mysql2/lib/packets/column_definition.js +291 -0
- package/dist/cjs/package/mysql2/lib/packets/execute.js +214 -0
- package/dist/cjs/package/mysql2/lib/packets/handshake.js +112 -0
- package/dist/cjs/package/mysql2/lib/packets/handshake_response.js +144 -0
- package/dist/cjs/package/mysql2/lib/packets/index.js +152 -0
- package/dist/cjs/package/mysql2/lib/packets/packet.js +931 -0
- package/dist/cjs/package/mysql2/lib/packets/prepare_statement.js +27 -0
- package/dist/cjs/package/mysql2/lib/packets/prepared_statement_header.js +16 -0
- package/dist/cjs/package/mysql2/lib/packets/query.js +27 -0
- package/dist/cjs/package/mysql2/lib/packets/register_slave.js +46 -0
- package/dist/cjs/package/mysql2/lib/packets/resultset_header.js +118 -0
- package/dist/cjs/package/mysql2/lib/packets/ssl_request.js +25 -0
- package/dist/cjs/package/mysql2/lib/packets/text_row.js +47 -0
- package/dist/cjs/package/mysql2/lib/parsers/binary_parser.js +231 -0
- package/dist/cjs/package/mysql2/lib/parsers/parser_cache.js +66 -0
- package/dist/cjs/package/mysql2/lib/parsers/static_binary_parser.js +211 -0
- package/dist/cjs/package/mysql2/lib/parsers/static_text_parser.js +152 -0
- package/dist/cjs/package/mysql2/lib/parsers/string.js +50 -0
- package/dist/cjs/package/mysql2/lib/parsers/text_parser.js +214 -0
- package/dist/cjs/package/mysql2/lib/pool.js +12 -0
- package/dist/cjs/package/mysql2/lib/pool_cluster.js +369 -0
- package/dist/cjs/package/mysql2/lib/pool_config.js +30 -0
- package/dist/cjs/package/mysql2/lib/pool_connection.js +12 -0
- package/dist/cjs/package/mysql2/lib/promise/connection.js +222 -0
- package/dist/cjs/package/mysql2/lib/promise/inherit_events.js +27 -0
- package/dist/cjs/package/mysql2/lib/promise/make_done_cb.js +19 -0
- package/dist/cjs/package/mysql2/lib/promise/pool.js +112 -0
- package/dist/cjs/package/mysql2/lib/promise/pool_cluster.js +54 -0
- package/dist/cjs/package/mysql2/lib/promise/pool_connection.js +19 -0
- package/dist/cjs/package/mysql2/lib/promise/prepared_statement_info.js +32 -0
- package/dist/cjs/package/mysql2/lib/results_stream.js +38 -0
- package/dist/cjs/package/mysql2/lib/server.js +37 -0
- package/dist/cjs/package/mysql2/package.json +80 -0
- package/dist/cjs/package/mysql2/promise.d.ts +131 -0
- package/dist/cjs/package/mysql2/promise.js +202 -0
- package/dist/cjs/package/mysql2/typings/mysql/LICENSE.txt +15 -0
- package/dist/cjs/package/mysql2/typings/mysql/index.d.ts +95 -0
- package/dist/cjs/package/mysql2/typings/mysql/info.txt +1 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/Auth.d.ts +30 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/Connection.d.ts +428 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/Pool.d.ts +69 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/PoolCluster.d.ts +90 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/PoolConnection.d.ts +10 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/Server.d.ts +11 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/constants/CharsetToEncoding.d.ts +8 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/constants/Charsets.d.ts +326 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/constants/Types.d.ts +70 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/constants/index.d.ts +5 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/parsers/ParserCache.d.ts +4 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/parsers/index.d.ts +18 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/parsers/typeCast.d.ts +54 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/Field.d.ts +10 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/FieldPacket.d.ts +27 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/OkPacket.d.ts +23 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/ProcedurePacket.d.ts +13 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/ResultSetHeader.d.ts +18 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/RowDataPacket.d.ts +9 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/index.d.ts +28 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/params/ErrorPacketParams.d.ts +6 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/packets/params/OkPacketParams.d.ts +9 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/sequences/ExecutableBase.d.ts +40 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/sequences/Prepare.d.ts +65 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/sequences/Query.d.ts +170 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/sequences/QueryableBase.d.ts +40 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/sequences/Sequence.d.ts +5 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/sequences/promise/ExecutableBase.d.ts +21 -0
- package/dist/cjs/package/mysql2/typings/mysql/lib/protocol/sequences/promise/QueryableBase.d.ts +21 -0
- package/dist/cjs/package/mysql_backup/index.js +69 -0
- package/dist/cjs/package/mysql_backup/promise.js +187 -0
- package/dist/cjs/server.d.ts +1 -1
- package/dist/cjs/server.d.ts.map +1 -1
- package/dist/cjs/server.js +1 -1
- package/dist/cjs/start.js +1 -1
- package/dist/cjs/update.js +1 -1
- package/dist/esm/browser.js +1 -1
- package/dist/esm/getAllRouter/index.js +1 -1
- package/dist/esm/hash/index.js +1 -1
- package/dist/esm/id/index.js +1 -1
- package/dist/esm/id/random.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/jwt/index.js +1 -1
- package/dist/esm/mac/index.js +1 -1
- package/dist/esm/package/mysql2/License +19 -0
- package/dist/esm/package/mysql2/README.md +114 -0
- package/dist/esm/package/mysql2/index.d.ts +1 -0
- package/dist/esm/package/mysql2/index.js +77 -0
- package/dist/esm/package/mysql2/lib/auth_41.js +95 -0
- package/dist/esm/package/mysql2/lib/auth_plugins/caching_sha2_password.js +108 -0
- package/dist/esm/package/mysql2/lib/auth_plugins/caching_sha2_password.md +18 -0
- package/dist/esm/package/mysql2/lib/auth_plugins/index.js +8 -0
- package/dist/esm/package/mysql2/lib/auth_plugins/mysql_clear_password.js +17 -0
- package/dist/esm/package/mysql2/lib/auth_plugins/mysql_native_password.js +34 -0
- package/dist/esm/package/mysql2/lib/auth_plugins/sha256_password.js +59 -0
- package/dist/esm/package/mysql2/lib/base/connection.js +945 -0
- package/dist/esm/package/mysql2/lib/base/pool.js +233 -0
- package/dist/esm/package/mysql2/lib/base/pool_connection.js +63 -0
- package/dist/esm/package/mysql2/lib/commands/auth_switch.js +111 -0
- package/dist/esm/package/mysql2/lib/commands/binlog_dump.js +109 -0
- package/dist/esm/package/mysql2/lib/commands/change_user.js +68 -0
- package/dist/esm/package/mysql2/lib/commands/client_handshake.js +241 -0
- package/dist/esm/package/mysql2/lib/commands/close_statement.js +18 -0
- package/dist/esm/package/mysql2/lib/commands/command.js +54 -0
- package/dist/esm/package/mysql2/lib/commands/execute.js +112 -0
- package/dist/esm/package/mysql2/lib/commands/index.js +27 -0
- package/dist/esm/package/mysql2/lib/commands/ping.js +36 -0
- package/dist/esm/package/mysql2/lib/commands/prepare.js +143 -0
- package/dist/esm/package/mysql2/lib/commands/query.js +329 -0
- package/dist/esm/package/mysql2/lib/commands/quit.js +29 -0
- package/dist/esm/package/mysql2/lib/commands/register_slave.js +27 -0
- package/dist/esm/package/mysql2/lib/commands/server_handshake.js +203 -0
- package/dist/esm/package/mysql2/lib/compressed_protocol.js +127 -0
- package/dist/esm/package/mysql2/lib/connection.js +12 -0
- package/dist/esm/package/mysql2/lib/connection_config.js +292 -0
- package/dist/esm/package/mysql2/lib/constants/charset_encodings.js +316 -0
- package/dist/esm/package/mysql2/lib/constants/charsets.js +317 -0
- package/dist/esm/package/mysql2/lib/constants/client.js +39 -0
- package/dist/esm/package/mysql2/lib/constants/commands.js +36 -0
- package/dist/esm/package/mysql2/lib/constants/cursor.js +8 -0
- package/dist/esm/package/mysql2/lib/constants/encoding_charset.js +49 -0
- package/dist/esm/package/mysql2/lib/constants/errors.js +3973 -0
- package/dist/esm/package/mysql2/lib/constants/field_flags.js +20 -0
- package/dist/esm/package/mysql2/lib/constants/server_status.js +44 -0
- package/dist/esm/package/mysql2/lib/constants/session_track.js +11 -0
- package/dist/esm/package/mysql2/lib/constants/ssl_profiles.js +11 -0
- package/dist/esm/package/mysql2/lib/constants/types.js +64 -0
- package/dist/esm/package/mysql2/lib/create_connection.js +10 -0
- package/dist/esm/package/mysql2/lib/create_pool.js +10 -0
- package/dist/esm/package/mysql2/lib/create_pool_cluster.js +9 -0
- package/dist/esm/package/mysql2/lib/helpers.js +86 -0
- package/dist/esm/package/mysql2/lib/packet_parser.js +195 -0
- package/dist/esm/package/mysql2/lib/packets/auth_next_factor.js +35 -0
- package/dist/esm/package/mysql2/lib/packets/auth_switch_request.js +38 -0
- package/dist/esm/package/mysql2/lib/packets/auth_switch_request_more_data.js +33 -0
- package/dist/esm/package/mysql2/lib/packets/auth_switch_response.js +30 -0
- package/dist/esm/package/mysql2/lib/packets/binary_row.js +95 -0
- package/dist/esm/package/mysql2/lib/packets/binlog_dump.js +33 -0
- package/dist/esm/package/mysql2/lib/packets/binlog_query_statusvars.js +115 -0
- package/dist/esm/package/mysql2/lib/packets/change_user.js +97 -0
- package/dist/esm/package/mysql2/lib/packets/close_statement.js +21 -0
- package/dist/esm/package/mysql2/lib/packets/column_definition.js +291 -0
- package/dist/esm/package/mysql2/lib/packets/execute.js +214 -0
- package/dist/esm/package/mysql2/lib/packets/handshake.js +112 -0
- package/dist/esm/package/mysql2/lib/packets/handshake_response.js +144 -0
- package/dist/esm/package/mysql2/lib/packets/index.js +152 -0
- package/dist/esm/package/mysql2/lib/packets/packet.js +931 -0
- package/dist/esm/package/mysql2/lib/packets/prepare_statement.js +27 -0
- package/dist/esm/package/mysql2/lib/packets/prepared_statement_header.js +16 -0
- package/dist/esm/package/mysql2/lib/packets/query.js +27 -0
- package/dist/esm/package/mysql2/lib/packets/register_slave.js +46 -0
- package/dist/esm/package/mysql2/lib/packets/resultset_header.js +118 -0
- package/dist/esm/package/mysql2/lib/packets/ssl_request.js +25 -0
- package/dist/esm/package/mysql2/lib/packets/text_row.js +47 -0
- package/dist/esm/package/mysql2/lib/parsers/binary_parser.js +231 -0
- package/dist/esm/package/mysql2/lib/parsers/parser_cache.js +66 -0
- package/dist/esm/package/mysql2/lib/parsers/static_binary_parser.js +211 -0
- package/dist/esm/package/mysql2/lib/parsers/static_text_parser.js +152 -0
- package/dist/esm/package/mysql2/lib/parsers/string.js +50 -0
- package/dist/esm/package/mysql2/lib/parsers/text_parser.js +214 -0
- package/dist/esm/package/mysql2/lib/pool.js +12 -0
- package/dist/esm/package/mysql2/lib/pool_cluster.js +369 -0
- package/dist/esm/package/mysql2/lib/pool_config.js +30 -0
- package/dist/esm/package/mysql2/lib/pool_connection.js +12 -0
- package/dist/esm/package/mysql2/lib/promise/connection.js +222 -0
- package/dist/esm/package/mysql2/lib/promise/inherit_events.js +27 -0
- package/dist/esm/package/mysql2/lib/promise/make_done_cb.js +19 -0
- package/dist/esm/package/mysql2/lib/promise/pool.js +112 -0
- package/dist/esm/package/mysql2/lib/promise/pool_cluster.js +54 -0
- package/dist/esm/package/mysql2/lib/promise/pool_connection.js +19 -0
- package/dist/esm/package/mysql2/lib/promise/prepared_statement_info.js +32 -0
- package/dist/esm/package/mysql2/lib/results_stream.js +38 -0
- package/dist/esm/package/mysql2/lib/server.js +37 -0
- package/dist/esm/package/mysql2/package.json +80 -0
- package/dist/esm/package/mysql2/promise.d.ts +131 -0
- package/dist/esm/package/mysql2/promise.js +202 -0
- package/dist/esm/package/mysql2/typings/mysql/LICENSE.txt +15 -0
- package/dist/esm/package/mysql2/typings/mysql/index.d.ts +95 -0
- package/dist/esm/package/mysql2/typings/mysql/info.txt +1 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/Auth.d.ts +30 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/Connection.d.ts +428 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/Pool.d.ts +69 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/PoolCluster.d.ts +90 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/PoolConnection.d.ts +10 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/Server.d.ts +11 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/constants/CharsetToEncoding.d.ts +8 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/constants/Charsets.d.ts +326 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/constants/Types.d.ts +70 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/constants/index.d.ts +5 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/parsers/ParserCache.d.ts +4 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/parsers/index.d.ts +18 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/parsers/typeCast.d.ts +54 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/Field.d.ts +10 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/FieldPacket.d.ts +27 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/OkPacket.d.ts +23 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/ProcedurePacket.d.ts +13 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/ResultSetHeader.d.ts +18 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/RowDataPacket.d.ts +9 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/index.d.ts +28 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/params/ErrorPacketParams.d.ts +6 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/packets/params/OkPacketParams.d.ts +9 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/sequences/ExecutableBase.d.ts +40 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/sequences/Prepare.d.ts +65 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/sequences/Query.d.ts +170 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/sequences/QueryableBase.d.ts +40 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/sequences/Sequence.d.ts +5 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/sequences/promise/ExecutableBase.d.ts +21 -0
- package/dist/esm/package/mysql2/typings/mysql/lib/protocol/sequences/promise/QueryableBase.d.ts +21 -0
- package/dist/esm/package/mysql_backup/index.js +69 -0
- package/dist/esm/package/mysql_backup/promise.js +187 -0
- package/dist/esm/server.d.ts +1 -1
- package/dist/esm/server.d.ts.map +1 -1
- package/dist/esm/server.js +1 -1
- package/dist/esm/start.js +1 -1
- package/dist/esm/update.js +1 -1
- package/package.json +3 -4
@@ -0,0 +1,211 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const FieldFlags = require('../constants/field_flags.js');
|
4
|
+
const Charsets = require('../constants/charsets.js');
|
5
|
+
const Types = require('../constants/types.js');
|
6
|
+
const helpers = require('../helpers');
|
7
|
+
|
8
|
+
const typeNames = [];
|
9
|
+
for (const t in Types) {
|
10
|
+
typeNames[Types[t]] = t;
|
11
|
+
}
|
12
|
+
|
13
|
+
function getBinaryParser(fields, _options, config) {
|
14
|
+
function readCode(field, config, options, fieldNum, packet) {
|
15
|
+
const supportBigNumbers = Boolean(
|
16
|
+
options.supportBigNumbers || config.supportBigNumbers
|
17
|
+
);
|
18
|
+
const bigNumberStrings = Boolean(
|
19
|
+
options.bigNumberStrings || config.bigNumberStrings
|
20
|
+
);
|
21
|
+
const timezone = options.timezone || config.timezone;
|
22
|
+
const dateStrings = options.dateStrings || config.dateStrings;
|
23
|
+
const unsigned = field.flags & FieldFlags.UNSIGNED;
|
24
|
+
|
25
|
+
switch (field.columnType) {
|
26
|
+
case Types.TINY:
|
27
|
+
return unsigned ? packet.readInt8() : packet.readSInt8();
|
28
|
+
case Types.SHORT:
|
29
|
+
return unsigned ? packet.readInt16() : packet.readSInt16();
|
30
|
+
case Types.LONG:
|
31
|
+
case Types.INT24: // in binary protocol int24 is encoded in 4 bytes int32
|
32
|
+
return unsigned ? packet.readInt32() : packet.readSInt32();
|
33
|
+
case Types.YEAR:
|
34
|
+
return packet.readInt16();
|
35
|
+
case Types.FLOAT:
|
36
|
+
return packet.readFloat();
|
37
|
+
case Types.DOUBLE:
|
38
|
+
return packet.readDouble();
|
39
|
+
case Types.NULL:
|
40
|
+
return null;
|
41
|
+
case Types.DATE:
|
42
|
+
case Types.DATETIME:
|
43
|
+
case Types.TIMESTAMP:
|
44
|
+
case Types.NEWDATE:
|
45
|
+
return helpers.typeMatch(field.columnType, dateStrings, Types)
|
46
|
+
? packet.readDateTimeString(
|
47
|
+
parseInt(field.decimals, 10),
|
48
|
+
null,
|
49
|
+
field.columnType
|
50
|
+
)
|
51
|
+
: packet.readDateTime(timezone);
|
52
|
+
case Types.TIME:
|
53
|
+
return packet.readTimeString();
|
54
|
+
case Types.DECIMAL:
|
55
|
+
case Types.NEWDECIMAL:
|
56
|
+
return config.decimalNumbers
|
57
|
+
? packet.parseLengthCodedFloat()
|
58
|
+
: packet.readLengthCodedString('ascii');
|
59
|
+
case Types.GEOMETRY:
|
60
|
+
return packet.parseGeometryValue();
|
61
|
+
case Types.VECTOR:
|
62
|
+
return packet.parseVector();
|
63
|
+
case Types.JSON:
|
64
|
+
// Since for JSON columns mysql always returns charset 63 (BINARY),
|
65
|
+
// we have to handle it according to JSON specs and use "utf8",
|
66
|
+
// see https://github.com/sidorares/node-mysql2/issues/409
|
67
|
+
return config.jsonStrings
|
68
|
+
? packet.readLengthCodedString('utf8')
|
69
|
+
: JSON.parse(packet.readLengthCodedString('utf8'));
|
70
|
+
case Types.LONGLONG:
|
71
|
+
if (!supportBigNumbers)
|
72
|
+
return unsigned
|
73
|
+
? packet.readInt64JSNumber()
|
74
|
+
: packet.readSInt64JSNumber();
|
75
|
+
return bigNumberStrings
|
76
|
+
? unsigned
|
77
|
+
? packet.readInt64String()
|
78
|
+
: packet.readSInt64String()
|
79
|
+
: unsigned
|
80
|
+
? packet.readInt64()
|
81
|
+
: packet.readSInt64();
|
82
|
+
default:
|
83
|
+
return field.characterSet === Charsets.BINARY
|
84
|
+
? packet.readLengthCodedBuffer()
|
85
|
+
: packet.readLengthCodedString(fields[fieldNum].encoding);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
return class BinaryRow {
|
90
|
+
constructor() {}
|
91
|
+
|
92
|
+
next(packet, fields, options) {
|
93
|
+
packet.readInt8(); // status byte
|
94
|
+
|
95
|
+
const nullBitmapLength = Math.floor((fields.length + 7 + 2) / 8);
|
96
|
+
const nullBitmaskBytes = new Array(nullBitmapLength);
|
97
|
+
|
98
|
+
for (let i = 0; i < nullBitmapLength; i++) {
|
99
|
+
nullBitmaskBytes[i] = packet.readInt8();
|
100
|
+
}
|
101
|
+
|
102
|
+
const result = options.rowsAsArray ? new Array(fields.length) : {};
|
103
|
+
let currentFieldNullBit = 4;
|
104
|
+
let nullByteIndex = 0;
|
105
|
+
|
106
|
+
for (let i = 0; i < fields.length; i++) {
|
107
|
+
const field = fields[i];
|
108
|
+
const typeCast =
|
109
|
+
options.typeCast !== undefined ? options.typeCast : config.typeCast;
|
110
|
+
|
111
|
+
let value;
|
112
|
+
if (nullBitmaskBytes[nullByteIndex] & currentFieldNullBit) {
|
113
|
+
value = null;
|
114
|
+
} else if (options.typeCast === false) {
|
115
|
+
value = packet.readLengthCodedBuffer();
|
116
|
+
} else {
|
117
|
+
const next = () => readCode(field, config, options, i, packet);
|
118
|
+
value =
|
119
|
+
typeof typeCast === 'function'
|
120
|
+
? typeCast(
|
121
|
+
{
|
122
|
+
type: typeNames[field.columnType],
|
123
|
+
length: field.columnLength,
|
124
|
+
db: field.schema,
|
125
|
+
table: field.table,
|
126
|
+
name: field.name,
|
127
|
+
string: function (encoding = field.encoding) {
|
128
|
+
if (
|
129
|
+
field.columnType === Types.JSON &&
|
130
|
+
encoding === field.encoding
|
131
|
+
) {
|
132
|
+
// Since for JSON columns mysql always returns charset 63 (BINARY),
|
133
|
+
// we have to handle it according to JSON specs and use "utf8",
|
134
|
+
// see https://github.com/sidorares/node-mysql2/issues/1661
|
135
|
+
console.warn(
|
136
|
+
`typeCast: JSON column "${field.name}" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \`field.string("utf8")\``
|
137
|
+
);
|
138
|
+
}
|
139
|
+
|
140
|
+
if (
|
141
|
+
[
|
142
|
+
Types.DATETIME,
|
143
|
+
Types.NEWDATE,
|
144
|
+
Types.TIMESTAMP,
|
145
|
+
Types.DATE,
|
146
|
+
].includes(field.columnType)
|
147
|
+
) {
|
148
|
+
return packet.readDateTimeString(
|
149
|
+
parseInt(field.decimals, 10)
|
150
|
+
);
|
151
|
+
}
|
152
|
+
|
153
|
+
if (field.columnType === Types.TINY) {
|
154
|
+
const unsigned = field.flags & FieldFlags.UNSIGNED;
|
155
|
+
|
156
|
+
return String(
|
157
|
+
unsigned ? packet.readInt8() : packet.readSInt8()
|
158
|
+
);
|
159
|
+
}
|
160
|
+
|
161
|
+
if (field.columnType === Types.TIME) {
|
162
|
+
return packet.readTimeString();
|
163
|
+
}
|
164
|
+
|
165
|
+
return packet.readLengthCodedString(encoding);
|
166
|
+
},
|
167
|
+
buffer: function () {
|
168
|
+
return packet.readLengthCodedBuffer();
|
169
|
+
},
|
170
|
+
geometry: function () {
|
171
|
+
return packet.parseGeometryValue();
|
172
|
+
},
|
173
|
+
},
|
174
|
+
next
|
175
|
+
)
|
176
|
+
: next();
|
177
|
+
}
|
178
|
+
|
179
|
+
if (options.rowsAsArray) {
|
180
|
+
result[i] = value;
|
181
|
+
} else if (typeof options.nestTables === 'string') {
|
182
|
+
const key = helpers.fieldEscape(
|
183
|
+
field.table + options.nestTables + field.name,
|
184
|
+
false
|
185
|
+
);
|
186
|
+
result[key] = value;
|
187
|
+
} else if (options.nestTables === true) {
|
188
|
+
const tableName = helpers.fieldEscape(field.table, false);
|
189
|
+
if (!result[tableName]) {
|
190
|
+
result[tableName] = {};
|
191
|
+
}
|
192
|
+
const fieldName = helpers.fieldEscape(field.name, false);
|
193
|
+
result[tableName][fieldName] = value;
|
194
|
+
} else {
|
195
|
+
const key = helpers.fieldEscape(field.name, false);
|
196
|
+
result[key] = value;
|
197
|
+
}
|
198
|
+
|
199
|
+
currentFieldNullBit *= 2;
|
200
|
+
if (currentFieldNullBit === 0x100) {
|
201
|
+
currentFieldNullBit = 1;
|
202
|
+
nullByteIndex++;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
|
206
|
+
return result;
|
207
|
+
}
|
208
|
+
};
|
209
|
+
}
|
210
|
+
|
211
|
+
module.exports = getBinaryParser;
|
@@ -0,0 +1,152 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const Types = require('../constants/types.js');
|
4
|
+
const Charsets = require('../constants/charsets.js');
|
5
|
+
const helpers = require('../helpers');
|
6
|
+
|
7
|
+
const typeNames = [];
|
8
|
+
for (const t in Types) {
|
9
|
+
typeNames[Types[t]] = t;
|
10
|
+
}
|
11
|
+
|
12
|
+
function readField({ packet, type, charset, encoding, config, options }) {
|
13
|
+
const supportBigNumbers = Boolean(
|
14
|
+
options.supportBigNumbers || config.supportBigNumbers
|
15
|
+
);
|
16
|
+
const bigNumberStrings = Boolean(
|
17
|
+
options.bigNumberStrings || config.bigNumberStrings
|
18
|
+
);
|
19
|
+
const timezone = options.timezone || config.timezone;
|
20
|
+
const dateStrings = options.dateStrings || config.dateStrings;
|
21
|
+
|
22
|
+
switch (type) {
|
23
|
+
case Types.TINY:
|
24
|
+
case Types.SHORT:
|
25
|
+
case Types.LONG:
|
26
|
+
case Types.INT24:
|
27
|
+
case Types.YEAR:
|
28
|
+
return packet.parseLengthCodedIntNoBigCheck();
|
29
|
+
case Types.LONGLONG:
|
30
|
+
if (supportBigNumbers && bigNumberStrings) {
|
31
|
+
return packet.parseLengthCodedIntString();
|
32
|
+
}
|
33
|
+
return packet.parseLengthCodedInt(supportBigNumbers);
|
34
|
+
case Types.FLOAT:
|
35
|
+
case Types.DOUBLE:
|
36
|
+
return packet.parseLengthCodedFloat();
|
37
|
+
case Types.NULL:
|
38
|
+
case Types.DECIMAL:
|
39
|
+
case Types.NEWDECIMAL:
|
40
|
+
if (config.decimalNumbers) {
|
41
|
+
return packet.parseLengthCodedFloat();
|
42
|
+
}
|
43
|
+
return packet.readLengthCodedString('ascii');
|
44
|
+
case Types.DATE:
|
45
|
+
if (helpers.typeMatch(type, dateStrings, Types)) {
|
46
|
+
return packet.readLengthCodedString('ascii');
|
47
|
+
}
|
48
|
+
return packet.parseDate(timezone);
|
49
|
+
case Types.DATETIME:
|
50
|
+
case Types.TIMESTAMP:
|
51
|
+
if (helpers.typeMatch(type, dateStrings, Types)) {
|
52
|
+
return packet.readLengthCodedString('ascii');
|
53
|
+
}
|
54
|
+
return packet.parseDateTime(timezone);
|
55
|
+
case Types.TIME:
|
56
|
+
return packet.readLengthCodedString('ascii');
|
57
|
+
case Types.GEOMETRY:
|
58
|
+
return packet.parseGeometryValue();
|
59
|
+
case Types.VECTOR:
|
60
|
+
return packet.parseVector();
|
61
|
+
case Types.JSON:
|
62
|
+
// Since for JSON columns mysql always returns charset 63 (BINARY),
|
63
|
+
// we have to handle it according to JSON specs and use "utf8",
|
64
|
+
// see https://github.com/sidorares/node-mysql2/issues/409
|
65
|
+
return config.jsonStrings
|
66
|
+
? packet.readLengthCodedString('utf8')
|
67
|
+
: JSON.parse(packet.readLengthCodedString('utf8'));
|
68
|
+
default:
|
69
|
+
if (charset === Charsets.BINARY) {
|
70
|
+
return packet.readLengthCodedBuffer();
|
71
|
+
}
|
72
|
+
return packet.readLengthCodedString(encoding);
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
function createTypecastField(field, packet) {
|
77
|
+
return {
|
78
|
+
type: typeNames[field.columnType],
|
79
|
+
length: field.columnLength,
|
80
|
+
db: field.schema,
|
81
|
+
table: field.table,
|
82
|
+
name: field.name,
|
83
|
+
string: function (encoding = field.encoding) {
|
84
|
+
if (field.columnType === Types.JSON && encoding === field.encoding) {
|
85
|
+
// Since for JSON columns mysql always returns charset 63 (BINARY),
|
86
|
+
// we have to handle it according to JSON specs and use "utf8",
|
87
|
+
// see https://github.com/sidorares/node-mysql2/issues/1661
|
88
|
+
console.warn(
|
89
|
+
`typeCast: JSON column "${field.name}" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \`field.string("utf8")\``
|
90
|
+
);
|
91
|
+
}
|
92
|
+
return packet.readLengthCodedString(encoding);
|
93
|
+
},
|
94
|
+
buffer: function () {
|
95
|
+
return packet.readLengthCodedBuffer();
|
96
|
+
},
|
97
|
+
geometry: function () {
|
98
|
+
return packet.parseGeometryValue();
|
99
|
+
},
|
100
|
+
};
|
101
|
+
}
|
102
|
+
|
103
|
+
function getTextParser(_fields, _options, config) {
|
104
|
+
return {
|
105
|
+
next(packet, fields, options) {
|
106
|
+
const result = options.rowsAsArray ? [] : {};
|
107
|
+
for (let i = 0; i < fields.length; i++) {
|
108
|
+
const field = fields[i];
|
109
|
+
const typeCast = options.typeCast ? options.typeCast : config.typeCast;
|
110
|
+
const next = () =>
|
111
|
+
readField({
|
112
|
+
packet,
|
113
|
+
type: field.columnType,
|
114
|
+
encoding: field.encoding,
|
115
|
+
charset: field.characterSet,
|
116
|
+
config,
|
117
|
+
options,
|
118
|
+
});
|
119
|
+
|
120
|
+
let value;
|
121
|
+
|
122
|
+
if (options.typeCast === false) {
|
123
|
+
value = packet.readLengthCodedBuffer();
|
124
|
+
} else if (typeof typeCast === 'function') {
|
125
|
+
value = typeCast(createTypecastField(field, packet), next);
|
126
|
+
} else {
|
127
|
+
value = next();
|
128
|
+
}
|
129
|
+
|
130
|
+
if (options.rowsAsArray) {
|
131
|
+
result.push(value);
|
132
|
+
} else if (typeof options.nestTables === 'string') {
|
133
|
+
result[
|
134
|
+
`${helpers.fieldEscape(field.table, false)}${options.nestTables}${helpers.fieldEscape(field.name, false)}`
|
135
|
+
] = value;
|
136
|
+
} else if (options.nestTables) {
|
137
|
+
const tableName = helpers.fieldEscape(field.table, false);
|
138
|
+
if (!result[tableName]) {
|
139
|
+
result[tableName] = {};
|
140
|
+
}
|
141
|
+
result[tableName][helpers.fieldEscape(field.name, false)] = value;
|
142
|
+
} else {
|
143
|
+
result[helpers.fieldEscape(field.name, false)] = value;
|
144
|
+
}
|
145
|
+
}
|
146
|
+
|
147
|
+
return result;
|
148
|
+
},
|
149
|
+
};
|
150
|
+
}
|
151
|
+
|
152
|
+
module.exports = getTextParser;
|
@@ -0,0 +1,50 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const Iconv = require('iconv-lite');
|
4
|
+
const { createLRU } = require('lru.min');
|
5
|
+
|
6
|
+
const decoderCache = createLRU({
|
7
|
+
max: 500,
|
8
|
+
});
|
9
|
+
|
10
|
+
exports.decode = function (buffer, encoding, start, end, options) {
|
11
|
+
if (Buffer.isEncoding(encoding)) {
|
12
|
+
return buffer.toString(encoding, start, end);
|
13
|
+
}
|
14
|
+
|
15
|
+
// Optimize for common case: encoding="short_string", options=undefined.
|
16
|
+
let decoder;
|
17
|
+
if (!options) {
|
18
|
+
decoder = decoderCache.get(encoding);
|
19
|
+
if (!decoder) {
|
20
|
+
decoder = Iconv.getDecoder(encoding);
|
21
|
+
decoderCache.set(encoding, decoder);
|
22
|
+
}
|
23
|
+
} else {
|
24
|
+
const decoderArgs = { encoding, options };
|
25
|
+
const decoderKey = JSON.stringify(decoderArgs);
|
26
|
+
decoder = decoderCache.get(decoderKey);
|
27
|
+
if (!decoder) {
|
28
|
+
decoder = Iconv.getDecoder(decoderArgs.encoding, decoderArgs.options);
|
29
|
+
decoderCache.set(decoderKey, decoder);
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
const res = decoder.write(buffer.slice(start, end));
|
34
|
+
const trail = decoder.end();
|
35
|
+
|
36
|
+
return trail ? res + trail : res;
|
37
|
+
};
|
38
|
+
|
39
|
+
exports.encode = function (string, encoding, options) {
|
40
|
+
if (Buffer.isEncoding(encoding)) {
|
41
|
+
return Buffer.from(string, encoding);
|
42
|
+
}
|
43
|
+
|
44
|
+
const encoder = Iconv.getEncoder(encoding, options || {});
|
45
|
+
|
46
|
+
const res = encoder.write(string);
|
47
|
+
const trail = encoder.end();
|
48
|
+
|
49
|
+
return trail && trail.length > 0 ? Buffer.concat([res, trail]) : res;
|
50
|
+
};
|
@@ -0,0 +1,214 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const Types = require('../constants/types.js');
|
4
|
+
const Charsets = require('../constants/charsets.js');
|
5
|
+
const helpers = require('../helpers');
|
6
|
+
const genFunc = require('generate-function');
|
7
|
+
const parserCache = require('./parser_cache.js');
|
8
|
+
|
9
|
+
const typeNames = [];
|
10
|
+
for (const t in Types) {
|
11
|
+
typeNames[Types[t]] = t;
|
12
|
+
}
|
13
|
+
|
14
|
+
function readCodeFor(type, charset, encodingExpr, config, options) {
|
15
|
+
const supportBigNumbers = Boolean(
|
16
|
+
options.supportBigNumbers || config.supportBigNumbers
|
17
|
+
);
|
18
|
+
const bigNumberStrings = Boolean(
|
19
|
+
options.bigNumberStrings || config.bigNumberStrings
|
20
|
+
);
|
21
|
+
const timezone = options.timezone || config.timezone;
|
22
|
+
const dateStrings = options.dateStrings || config.dateStrings;
|
23
|
+
|
24
|
+
switch (type) {
|
25
|
+
case Types.TINY:
|
26
|
+
case Types.SHORT:
|
27
|
+
case Types.LONG:
|
28
|
+
case Types.INT24:
|
29
|
+
case Types.YEAR:
|
30
|
+
return 'packet.parseLengthCodedIntNoBigCheck()';
|
31
|
+
case Types.LONGLONG:
|
32
|
+
if (supportBigNumbers && bigNumberStrings) {
|
33
|
+
return 'packet.parseLengthCodedIntString()';
|
34
|
+
}
|
35
|
+
return `packet.parseLengthCodedInt(${supportBigNumbers})`;
|
36
|
+
case Types.FLOAT:
|
37
|
+
case Types.DOUBLE:
|
38
|
+
return 'packet.parseLengthCodedFloat()';
|
39
|
+
case Types.NULL:
|
40
|
+
return 'packet.readLengthCodedNumber()';
|
41
|
+
case Types.DECIMAL:
|
42
|
+
case Types.NEWDECIMAL:
|
43
|
+
if (config.decimalNumbers) {
|
44
|
+
return 'packet.parseLengthCodedFloat()';
|
45
|
+
}
|
46
|
+
return 'packet.readLengthCodedString("ascii")';
|
47
|
+
case Types.DATE:
|
48
|
+
if (helpers.typeMatch(type, dateStrings, Types)) {
|
49
|
+
return 'packet.readLengthCodedString("ascii")';
|
50
|
+
}
|
51
|
+
return `packet.parseDate(${helpers.srcEscape(timezone)})`;
|
52
|
+
case Types.DATETIME:
|
53
|
+
case Types.TIMESTAMP:
|
54
|
+
if (helpers.typeMatch(type, dateStrings, Types)) {
|
55
|
+
return 'packet.readLengthCodedString("ascii")';
|
56
|
+
}
|
57
|
+
return `packet.parseDateTime(${helpers.srcEscape(timezone)})`;
|
58
|
+
case Types.TIME:
|
59
|
+
return 'packet.readLengthCodedString("ascii")';
|
60
|
+
case Types.GEOMETRY:
|
61
|
+
return 'packet.parseGeometryValue()';
|
62
|
+
case Types.VECTOR:
|
63
|
+
return 'packet.parseVector()';
|
64
|
+
case Types.JSON:
|
65
|
+
// Since for JSON columns mysql always returns charset 63 (BINARY),
|
66
|
+
// we have to handle it according to JSON specs and use "utf8",
|
67
|
+
// see https://github.com/sidorares/node-mysql2/issues/409
|
68
|
+
return config.jsonStrings
|
69
|
+
? 'packet.readLengthCodedString("utf8")'
|
70
|
+
: 'JSON.parse(packet.readLengthCodedString("utf8"))';
|
71
|
+
default:
|
72
|
+
if (charset === Charsets.BINARY) {
|
73
|
+
return 'packet.readLengthCodedBuffer()';
|
74
|
+
}
|
75
|
+
return `packet.readLengthCodedString(${encodingExpr})`;
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
function compile(fields, options, config) {
|
80
|
+
// use global typeCast if current query doesn't specify one
|
81
|
+
if (
|
82
|
+
typeof config.typeCast === 'function' &&
|
83
|
+
typeof options.typeCast !== 'function'
|
84
|
+
) {
|
85
|
+
options.typeCast = config.typeCast;
|
86
|
+
}
|
87
|
+
|
88
|
+
function wrap(field, _this) {
|
89
|
+
return {
|
90
|
+
type: typeNames[field.columnType],
|
91
|
+
length: field.columnLength,
|
92
|
+
db: field.schema,
|
93
|
+
table: field.table,
|
94
|
+
name: field.name,
|
95
|
+
string: function (encoding = field.encoding) {
|
96
|
+
if (field.columnType === Types.JSON && encoding === field.encoding) {
|
97
|
+
// Since for JSON columns mysql always returns charset 63 (BINARY),
|
98
|
+
// we have to handle it according to JSON specs and use "utf8",
|
99
|
+
// see https://github.com/sidorares/node-mysql2/issues/1661
|
100
|
+
console.warn(
|
101
|
+
`typeCast: JSON column "${field.name}" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \`field.string("utf8")\``
|
102
|
+
);
|
103
|
+
}
|
104
|
+
|
105
|
+
return _this.packet.readLengthCodedString(encoding);
|
106
|
+
},
|
107
|
+
buffer: function () {
|
108
|
+
return _this.packet.readLengthCodedBuffer();
|
109
|
+
},
|
110
|
+
geometry: function () {
|
111
|
+
return _this.packet.parseGeometryValue();
|
112
|
+
},
|
113
|
+
};
|
114
|
+
}
|
115
|
+
|
116
|
+
const parserFn = genFunc();
|
117
|
+
|
118
|
+
parserFn('(function () {')('return class TextRow {');
|
119
|
+
|
120
|
+
// constructor method
|
121
|
+
parserFn('constructor(fields) {');
|
122
|
+
// node-mysql typeCast compatibility wrapper
|
123
|
+
// see https://github.com/mysqljs/mysql/blob/96fdd0566b654436624e2375c7b6604b1f50f825/lib/protocol/packets/Field.js
|
124
|
+
if (typeof options.typeCast === 'function') {
|
125
|
+
parserFn('const _this = this;');
|
126
|
+
parserFn('for(let i=0; i<fields.length; ++i) {');
|
127
|
+
parserFn('this[`wrap${i}`] = wrap(fields[i], _this);');
|
128
|
+
parserFn('}');
|
129
|
+
}
|
130
|
+
parserFn('}');
|
131
|
+
|
132
|
+
// next method
|
133
|
+
parserFn('next(packet, fields, options) {');
|
134
|
+
parserFn('this.packet = packet;');
|
135
|
+
if (options.rowsAsArray) {
|
136
|
+
parserFn(`const result = new Array(${fields.length});`);
|
137
|
+
} else {
|
138
|
+
parserFn('const result = {};');
|
139
|
+
}
|
140
|
+
|
141
|
+
const resultTables = {};
|
142
|
+
let resultTablesArray = [];
|
143
|
+
|
144
|
+
if (options.nestTables === true) {
|
145
|
+
for (let i = 0; i < fields.length; i++) {
|
146
|
+
resultTables[fields[i].table] = 1;
|
147
|
+
}
|
148
|
+
resultTablesArray = Object.keys(resultTables);
|
149
|
+
for (let i = 0; i < resultTablesArray.length; i++) {
|
150
|
+
parserFn(`result[${helpers.fieldEscape(resultTablesArray[i])}] = {};`);
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
let lvalue = '';
|
155
|
+
let fieldName = '';
|
156
|
+
let tableName = '';
|
157
|
+
for (let i = 0; i < fields.length; i++) {
|
158
|
+
fieldName = helpers.fieldEscape(fields[i].name);
|
159
|
+
// parserFn(`// ${fieldName}: ${typeNames[fields[i].columnType]}`);
|
160
|
+
|
161
|
+
if (typeof options.nestTables === 'string') {
|
162
|
+
lvalue = `result[${helpers.fieldEscape(fields[i].table + options.nestTables + fields[i].name)}]`;
|
163
|
+
} else if (options.nestTables === true) {
|
164
|
+
tableName = helpers.fieldEscape(fields[i].table);
|
165
|
+
|
166
|
+
parserFn(`if (!result[${tableName}]) result[${tableName}] = {};`);
|
167
|
+
lvalue = `result[${tableName}][${fieldName}]`;
|
168
|
+
} else if (options.rowsAsArray) {
|
169
|
+
lvalue = `result[${i.toString(10)}]`;
|
170
|
+
} else {
|
171
|
+
lvalue = `result[${fieldName}]`;
|
172
|
+
}
|
173
|
+
if (options.typeCast === false) {
|
174
|
+
parserFn(`${lvalue} = packet.readLengthCodedBuffer();`);
|
175
|
+
} else {
|
176
|
+
const encodingExpr = `fields[${i}].encoding`;
|
177
|
+
const readCode = readCodeFor(
|
178
|
+
fields[i].columnType,
|
179
|
+
fields[i].characterSet,
|
180
|
+
encodingExpr,
|
181
|
+
config,
|
182
|
+
options
|
183
|
+
);
|
184
|
+
if (typeof options.typeCast === 'function') {
|
185
|
+
parserFn(
|
186
|
+
`${lvalue} = options.typeCast(this.wrap${i}, function() { return ${readCode} });`
|
187
|
+
);
|
188
|
+
} else {
|
189
|
+
parserFn(`${lvalue} = ${readCode};`);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
}
|
193
|
+
|
194
|
+
parserFn('return result;');
|
195
|
+
parserFn('}');
|
196
|
+
parserFn('};')('})()');
|
197
|
+
|
198
|
+
if (config.debug) {
|
199
|
+
helpers.printDebugWithCode(
|
200
|
+
'Compiled text protocol row parser',
|
201
|
+
parserFn.toString()
|
202
|
+
);
|
203
|
+
}
|
204
|
+
if (typeof options.typeCast === 'function') {
|
205
|
+
return parserFn.toFunction({ wrap });
|
206
|
+
}
|
207
|
+
return parserFn.toFunction();
|
208
|
+
}
|
209
|
+
|
210
|
+
function getTextParser(fields, options, config) {
|
211
|
+
return parserCache.getParser('text', fields, options, config, compile);
|
212
|
+
}
|
213
|
+
|
214
|
+
module.exports = getTextParser;
|