@@ -1908,82 +1908,44 @@ SQLRETURN BindParameterArray(SQLHANDLE hStmt,
19081908 bufferLength = sizeof (SQL_NUMERIC_STRUCT);
19091909 break ;
19101910 }
1911- // case SQL_C_GUID: {
1912- // SQLGUID* guidArray = AllocateParamBufferArray<SQLGUID>(tempBuffers, paramSetSize);
1913- // strLenOrIndArray = AllocateParamBufferArray<SQLLEN>(tempBuffers, paramSetSize);
1914-
1915- // for (size_t i = 0; i < paramSetSize; ++i) {
1916- // if (columnValues[i].is_none()) {
1917- // std::memset(&guidArray[i], 0, sizeof(SQLGUID));
1918- // strLenOrIndArray[i] = SQL_NULL_DATA;
1919- // } else {
1920- // if (!py::isinstance<py::bytes>(columnValues[i])) {
1921- // ThrowStdException(MakeParamMismatchErrorStr(info.paramCType, paramIndex));
1922- // }
1923- // py::bytes uuid_bytes = columnValues[i].cast<py::bytes>();
1924- // const unsigned char* uuid_data = reinterpret_cast<const unsigned char*>(PyBytes_AS_STRING(uuid_bytes.ptr()));
1925- // if (PyBytes_GET_SIZE(uuid_bytes.ptr()) != 16) {
1926- // ThrowStdException("UUID binary data must be exactly 16 bytes long.");
1927- // }
1928-
1929- // // Map bytes to SQLGUID fields
1930- // guidArray[i].Data1 = (static_cast<uint32_t>(uuid_data[3]) << 24) |
1931- // (static_cast<uint32_t>(uuid_data[2]) << 16) |
1932- // (static_cast<uint32_t>(uuid_data[1]) << 8) |
1933- // (static_cast<uint32_t>(uuid_data[0]));
1934- // guidArray[i].Data2 = (static_cast<uint16_t>(uuid_data[5]) << 8) |
1935- // (static_cast<uint16_t>(uuid_data[4]));
1936- // guidArray[i].Data3 = (static_cast<uint16_t>(uuid_data[7]) << 8) |
1937- // (static_cast<uint16_t>(uuid_data[6]));
1938- // std::memcpy(guidArray[i].Data4, &uuid_data[8], 8);
1939-
1940- // strLenOrIndArray[i] = sizeof(SQLGUID);
1941- // }
1942- // }
1943-
1944- // dataPtr = guidArray;
1945- // bufferLength = sizeof(SQLGUID);
1946- // break;
1947- // }
1948- case SQL_C_GUID: {
1949- SQLGUID* guidArray = AllocateParamBufferArray<SQLGUID>(tempBuffers, paramSetSize);
1950- strLenOrIndArray = AllocateParamBufferArray<SQLLEN>(tempBuffers, paramSetSize);
1951-
1952- py::object uuid_type = py::module_::import (" uuid" ).attr (" UUID" );
1953-
1954- for (size_t i = 0 ; i < paramSetSize; ++i) {
1955- if (columnValues[i].is_none ()) {
1956- std::memset (&guidArray[i], 0 , sizeof (SQLGUID));
1957- strLenOrIndArray[i] = SQL_NULL_DATA;
1958- } else if (py::isinstance (columnValues[i], uuid_type)) {
1959- py::bytes uuid_bytes = columnValues[i].attr (" bytes" );
1960- const unsigned char * uuid_data = reinterpret_cast <const unsigned char *>(PyBytes_AS_STRING (uuid_bytes.ptr ()));
1961-
1962- if (PyBytes_GET_SIZE (uuid_bytes.ptr ()) != 16 ) {
1963- ThrowStdException (" UUID binary data must be exactly 16 bytes long." );
1964- }
1911+ case SQL_C_GUID: {
1912+ SQLGUID* guidArray = AllocateParamBufferArray<SQLGUID>(tempBuffers, paramSetSize);
1913+ strLenOrIndArray = AllocateParamBufferArray<SQLLEN>(tempBuffers, paramSetSize);
19651914
1966- guidArray[i].Data1 = (static_cast <uint32_t >(uuid_data[3 ]) << 24 ) |
1967- (static_cast <uint32_t >(uuid_data[2 ]) << 16 ) |
1968- (static_cast <uint32_t >(uuid_data[1 ]) << 8 ) |
1969- (static_cast <uint32_t >(uuid_data[0 ]));
1970- guidArray[i].Data2 = (static_cast <uint16_t >(uuid_data[5 ]) << 8 ) |
1971- (static_cast <uint16_t >(uuid_data[4 ]));
1972- guidArray[i].Data3 = (static_cast <uint16_t >(uuid_data[7 ]) << 8 ) |
1973- (static_cast <uint16_t >(uuid_data[6 ]));
1974- std::memcpy (guidArray[i].Data4 , &uuid_data[8 ], 8 );
1975-
1976- strLenOrIndArray[i] = sizeof (SQLGUID);
1977- } else {
1978- ThrowStdException (MakeParamMismatchErrorStr (info.paramCType , paramIndex));
1979- }
1980- }
1915+ py::object uuid_type = py::module_::import (" uuid" ).attr (" UUID" );
19811916
1982- dataPtr = guidArray;
1983- bufferLength = sizeof (SQLGUID);
1984- break ;
1985- }
1917+ for (size_t i = 0 ; i < paramSetSize; ++i) {
1918+ if (columnValues[i].is_none ()) {
1919+ std::memset (&guidArray[i], 0 , sizeof (SQLGUID));
1920+ strLenOrIndArray[i] = SQL_NULL_DATA;
1921+ } else if (py::isinstance (columnValues[i], uuid_type)) {
1922+ py::bytes uuid_bytes = columnValues[i].attr (" bytes" );
1923+ const unsigned char * uuid_data = reinterpret_cast <const unsigned char *>(PyBytes_AS_STRING (uuid_bytes.ptr ()));
19861924
1925+ if (PyBytes_GET_SIZE (uuid_bytes.ptr ()) != 16 ) {
1926+ ThrowStdException (" UUID binary data must be exactly 16 bytes long." );
1927+ }
1928+
1929+ guidArray[i].Data1 = (static_cast <uint32_t >(uuid_data[3 ]) << 24 ) |
1930+ (static_cast <uint32_t >(uuid_data[2 ]) << 16 ) |
1931+ (static_cast <uint32_t >(uuid_data[1 ]) << 8 ) |
1932+ (static_cast <uint32_t >(uuid_data[0 ]));
1933+ guidArray[i].Data2 = (static_cast <uint16_t >(uuid_data[5 ]) << 8 ) |
1934+ (static_cast <uint16_t >(uuid_data[4 ]));
1935+ guidArray[i].Data3 = (static_cast <uint16_t >(uuid_data[7 ]) << 8 ) |
1936+ (static_cast <uint16_t >(uuid_data[6 ]));
1937+ std::memcpy (guidArray[i].Data4 , &uuid_data[8 ], 8 );
1938+
1939+ strLenOrIndArray[i] = sizeof (SQLGUID);
1940+ } else {
1941+ ThrowStdException (MakeParamMismatchErrorStr (info.paramCType , paramIndex));
1942+ }
1943+ }
1944+
1945+ dataPtr = guidArray;
1946+ bufferLength = sizeof (SQLGUID);
1947+ break ;
1948+ }
19871949 default : {
19881950 ThrowStdException (" BindParameterArray: Unsupported C type: " + std::to_string (info.paramCType ));
19891951 }
0 commit comments