diff --git a/.binding.gyp.un~ b/.binding.gyp.un~ deleted file mode 100644 index 589d3096..00000000 Binary files a/.binding.gyp.un~ and /dev/null differ diff --git a/.package.json.un~ b/.package.json.un~ deleted file mode 100644 index 96f905f2..00000000 Binary files a/.package.json.un~ and /dev/null differ diff --git a/.vscode/launch.json b/.vscode/launch.json index c1cdb7ea..4e511dc5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -25,8 +25,9 @@ "request": "launch", "program": "C:/Program Files/nodejs/node.exe", "args": [ - "./node_modules/mocha/bin/mocha.js", - "test/sproc" + "samples/javascript/streaming.js" + // "./node_modules/mocha/bin/mocha.js", + // "test/sproc" // "test/table-builder" // "simple-demo" // "runtest", "-k", "linux", @@ -41,7 +42,7 @@ // "-t", "multiple-errors", // "-t", "geography", // "-t", "tvp", - // "-t", "warnings", + //"-t", "warnings", // "-t", "txn", // "-t", "datatypes", // "-t", "sproc" @@ -62,10 +63,10 @@ "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", - "program": "/home/stephen/.nvm/versions/node/v15.12.0/bin/node", + "program": "C:/ProgramData/nvm/v22.5.1/node", "args": [ - "runtest", "-k", "wsl", - "-t", "prepared", + "samples/javascript/streaming.js", + // "-t", "prepared", // "-t", "warnings", // "-t", "bulk", // "-t", "querycancel", diff --git a/appveyor.yml b/appveyor.yml index 260ae8d2..1eb837d0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,8 +9,8 @@ platform: environment: matrix: + - nodejs_version: 22 - nodejs_version: 20 - - nodejs_version: 18 test_script: - ps: Write-Host "msnodesqlv8 test script" diff --git a/binding.gyp b/binding.gyp index 7b5dcdc0..11b575e9 100644 --- a/binding.gyp +++ b/binding.gyp @@ -1,190 +1,192 @@ { - 'conditions': [ - [ - 'OS=="mac"', { - 'variables': { - 'arch%': ' [" - "'/opt/microsoft/' + x +'/include/'" - " ," - "'/usr/local/opt/' + x + '/include/'" - " ," - "'/usr/local/opt/' + x + '/include/' + x + '/'" - " ," - "'/opt/homebrew/include/' + x + '/'" - " ," - "'/home/linuxbrew/.linuxbrew/include/'" - "])" - ".flatMap(y => y)" - ".filter(z => require('fs').existsSync(z))" - ".join(' ')" - "\")" - ], - # set fo - # the link folders available -L/usr/local/lib -L/usr/lib -L. - 'link_path%': [ - " require('fs')" - ".existsSync(x))" - ".map(x => '-L'+ x)" - ".join(' ')" - "\")" - ], # set for macos based on silicon - - # enumerate the cpp src files rather than name them. - 'fileset%': [ - " x.endsWith('<(ext)'))" - ".map(f => 'src/'+f)" - ".join(' ')" - "\")" - ] - }, - - 'sources' : [ - " [" + "'/opt/microsoft/' + x +'/include/'" + " ," + "'/usr/local/opt/' + x + '/include/'" + " ," + "'/usr/local/opt/' + x + '/include/' + x + '/'" + " ," + "'/opt/homebrew/include/' + x + '/'" + " ," + "'/home/linuxbrew/.linuxbrew/include/'" + "])" + ".flatMap(y => y)" + ".filter(z => require('fs').existsSync(z))" + ".join(' ')" + '")' + ], + # set fo + # the link folders available -L/usr/local/lib -L/usr/lib -L. + "link_path%": [ + ' require('fs')" + ".existsSync(x))" + ".map(x => '-L'+ x)" + ".join(' ')" + '")' + ], # set for macos based on silicon + # enumerate the cpp src files rather than name them. + "fileset%": [ + ' x.endsWith('<(ext)'))" + ".map(f => 'src/'+f)" + ".join(' ')" + '")' + ], }, - 'defines': [ - 'LINUX_BUILD', - 'UNICODE' - ], - 'cflags_cc': ['<(cflags_cpp)'], - 'include_dirs': [ - " [" - "'/opt/microsoft/' + x +'/include/'" - " ," - "'/usr/local/opt/' + x + '/include/'" - " ," - "'/usr/local/opt/' + x + '/include/' + x + '/'" - " ," - "'/opt/homebrew/include/' + x + '/'" - " ," - "'/home/linuxbrew/.linuxbrew/include/'" - "])" - ".flatMap(y => y)" - ".filter(z => require('fs').existsSync(z))" - ".join(' ')" - "\")" - ], - # set fo - # the link folders available -L/usr/local/lib -L/usr/lib -L. - 'link_path%': [ - " require('fs')" - ".existsSync(x))" - ".map(x => '-L'+ x)" - ".join(' ')" - "\")" - ], # set for macos based on silicon - - # enumerate the cpp src files rather than name them. - 'fileset%': [ - " x.endsWith('<(ext)'))" - ".map(f => 'src/'+f)" - ".join(' ')" - "\")" - ] - }, - - 'sources' : [ - "&v, SQLSMALLINT len) const { + auto take = min(v.capacity(), (size_t)len); + auto c_msg = swcvec2str(v, take); + return c_msg; + } + void OdbcHandle::read_errors(shared_ptr>> & errors) const { SQLSMALLINT msg_len = 0; SQLRETURN rc2; SQLINTEGER native_error = 0; vector msg; - msg.reserve(2 * 1024); - msg.resize(2 * 1024); + msg.reserve(10 * 1024); + msg.resize(10 * 1024); vector sql_state; sql_state.reserve(6); sql_state.resize(6); @@ -112,15 +118,14 @@ namespace mssql if (rc2 < 0) { break; } - - auto c_msg = swcvec2str(msg, msg_len); + auto c_msg = trim(msg, msg_len); auto c_state = swcvec2str(sql_state, sql_state.size()); const auto m = string(c_msg); SQLGetDiagField(HandleType, handle, i, SQL_DIAG_SS_SEVERITY, &severity, SQL_IS_INTEGER, nullptr); SQLGetDiagField(HandleType, handle, i, SQL_DIAG_SS_SRVNAME, serverName.data(), serverName.capacity(), &serverName_len); - const string c_serverName = swcvec2str(serverName, serverName_len); + const string c_serverName = trim(serverName, serverName_len); SQLGetDiagField(HandleType, handle, i, SQL_DIAG_SS_PROCNAME, procName.data(), procName.capacity(), &procName_len); - const string c_procName = swcvec2str(procName, procName_len); + const string c_procName = trim(procName, procName_len); SQLGetDiagField(HandleType, handle, i, SQL_DIAG_SS_LINE, &lineNumber, SQL_IS_UINTEGER, nullptr); if (received.find(m) == received.end()) { const auto last = make_shared(c_state.c_str(), c_msg.c_str(), native_error, severity, c_serverName.c_str(), c_procName.c_str(), lineNumber); diff --git a/src/OdbcHandle.h b/src/OdbcHandle.h index 92bcad72..040bf2da 100644 --- a/src/OdbcHandle.h +++ b/src/OdbcHandle.h @@ -41,7 +41,7 @@ namespace mssql void read_errors(shared_ptr>> & errors) const; private: - + std::string trim(vector&v, SQLSMALLINT len) const; void operator=(const OdbcHandle& orig) { assert(false);