Skip to content

Conversation

@nehoffman
Copy link

@nehoffman nehoffman commented Jun 12, 2020

The go2sqlDataType function would return a varbinary of any length,
however, 8000 is the maximum size any varbinary data type can be.
Source: https://docs.microsoft.com/en-us/sql/t-sql/data-types/binary-and-varbinary-transact-sql?view=sql-server-ver15

To be larger than 8000, it must be a varbinary (MAX). Otherwise, this would cause an error when calling conn.ExecuteSql with a byte slice with a greater length than 8000.
I've made this adjustment and added a test to make sure it keeps working.

Varbinary was being returned with a number greater than 8000 (the maximum) when the length of []byte was too long.
Switched so that it will automatically switch to varbinary (MAX) when needed.
Removed redundant max(1, len(b)) function call since that is not needed to check if the length is over 8000.
Slightly altered style to match the rest of the code base as well.
Added a test to ensure that all byte slices with a length over 8000 will auto-switch to varbinary (MAX).
Added a boolean flag for whether the attached database is MSSQL2005, and it's being used
to determine whether to use datetimeoffset or datetime for variables. Added a test to
make sure the correct date type is used.
Attempting to run a SQL query after the DbProcMutex was locked was causing a permament lockup.
Switched to running the SQL query asynchronously.
The value of conn.mssqlVersion2005 was incorrect on query runtime. This was either
because it never got set, or didn't get set in time. Removed asynchronous function
call and replaced it with a synchronous one in a spot of code that will not cause
a lock to occur.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant