Skip to content

Error in test suite on M1: Program type out of range #41

@soupi

Description

@soupi

I am getting an error running the test suite on a macbook with the M1 chip.

Specifically, the Database.ODBC.Internal, Data retrieval, Basic santiy check test fails with
UnsuccessfulReturnCode "getSize" (-1) "[unixODBC][Driver Manager]Program type out of range[unixODBC][Driver Manager]Program type out of range"


Context

I'm on macOS, M1 chip, using brew install HOMEBREW_NO_ENV_FILTERING=1 ACCEPT_EULA=Y brew install msodbcsql17 mssql-tools unixodbc to install odbc drivers.

I'm using the mcr.microsoft.com/azure-sql-edge:latest docker image to run mssql server:

$ docker run --name odbc-test-21433 --platform linux/arm64 -e ACCEPT_EULA=1 -e MSSQL_SA_PASSWORD=hUntEr202 -p 127.0.0.1:21433:1433 -d mcr.microsoft.com/azure-sql-edge
1> select @@VERSION;
2> go

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft Azure SQL Edge Developer (RTM) - 15.0.2000.1559 (ARM64)
	Jun  8 2021 15:48:33
	Copyright (C) 2019 Microsoft Corporation
	Linux (Ubuntu 18.04.5 LTS aarch64) <ARM64>

but this issue also occurs when running SQL Server on a remote machine with x86_64:

> select @@VERSION;
[row 0]
: "Microsoft SQL Server 2019 (RTM-CU10) (KB5001090) - 15.0.4123.1 (X64) \n\tMar 22 2021 18:10:24 \n\tCopyright (C) 2019 Microsoft Corporation\n\tDeveloper Edition (64-bit) on Linux (Ubuntu 20.04.2 LTS) <X64>"

I've cloned the fpco/odbc repo and built with cabal and ghc-8.10.7, then ran the tests:

ODBC_TEST_CONNECTION_STRING='DRIVER={ODBC Driver 17 for SQL Server};SERVER=127.0.0.1,21433;Uid=sa;Pwd=hUntEr202;Encrypt=no' cabal v2-run tests

Result: 97 examples, 1 failure:

Failures:

  test/Main.hs:198:3:
  1) Database.ODBC.Internal, Data retrieval, Basic santiy check
       uncaught exception: ODBCException
       UnsuccessfulReturnCode "getSize" (-1) "[unixODBC][Driver Manager]Program type out of range[unixODBC][Driver Manager]Program type out of range"

I've tried to run this test repeatedly by changing the failing test in tests/Main.hs from:

  it "Basic santiy check"

to:

  forM_ [1..100] $ \i -> describe "Basic sanity check" $ it (show (i :: Int))

And ran it again:

ODBC_TEST_CONNECTION_STRING='DRIVER={ODBC Driver 17 for SQL Server};SERVER=127.0.0.1,21433;Uid=sa;Pwd=hUntEr202;Encrypt=no' cabal v2-run tests -- --match "Basic sanity"

And the failing test failed exactly 21 times and then started passing. This behaviour is consistent when running the test many times:

100 examples, 21 failures

I can replicate similar behaviour when running cabal v2-run odbc and running the test manually. If we are a bit persistent we can get the expected results:

% cabal v2-run odbc -- 'DRIVER={ODBC Driver 17 for SQL Server};SERVER=127.0.0.1,21433;Uid=sa;Pwd=hUntEr202;Encrypt=no'
> DROP TABLE IF EXISTS test;
Rows: 0
> CREATE TABLE test (int integer, text text, bool bit, nt ntext, fl float);
Rows: 0
> INSERT INTO test VALUES (123, 'abc', 1, 'wib', 2.415), (456, 'def', 0, 'wibble',0.9999999999999), (NULL, NULL, NULL, NULL, NULL);
Rows: 0
> SELECT * FROM test;
UnsuccessfulReturnCode "getSize" (-1) "[unixODBC][Driver Manager]Program type out of range[unixODBC][Driver Manager]Program type out of range["
> SELECT * FROM test;
UnsuccessfulReturnCode "getSize" (-1) "[unixODBC][Driver Manager]Program type out of range[unixODBC][Driver Manager]Program type out of range"
> SELECT * FROM test;
[row 0]
int: 123
text: "abc"
bool: True
nt: "wib"
fl: 2.415

[row 1]
int: 456
text: "def"
bool: False
nt: "wibble"
fl: 0.9999999999999

[row 2]
int: NULL
text: NULL
bool: NULL
nt: NULL
fl: NULL

Rows: 3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions