From 497ba130b7022f86889c0bda1f8b347855c1e41e Mon Sep 17 00:00:00 2001 From: Hadis Fard Date: Thu, 25 May 2017 09:47:52 -0700 Subject: [PATCH 01/11] Updated supported SQL Server version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 72395212..46a992b6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Welcome to the Microsoft Drivers for PHP for SQL Server PHP 7** -The Microsoft Drivers for PHP for SQL Server are PHP extensions that allow for the reading and writing of SQL Server data from within PHP scripts. The SQLSRV extension provides a procedural interface while the PDO_SQLSRV extension implements PDO for accessing data in all editions of SQL Server 2005 and later (including Azure SQL DB). These drivers rely on the Microsoft ODBC Driver for SQL Server to handle the low-level communication with SQL Server. +The Microsoft Drivers for PHP for SQL Server are PHP extensions that allow for the reading and writing of SQL Server data from within PHP scripts. The SQLSRV extension provides a procedural interface while the PDO_SQLSRV extension implements PDO for accessing data in all editions of SQL Server 2008 R2 and later (including Azure SQL DB). These drivers rely on the Microsoft ODBC Driver for SQL Server to handle the low-level communication with SQL Server. This release contains the SQLSRV and PDO_SQLSRV drivers for PHP 7 with improvements on both drivers and some limitations (see Limitations below for details). Upcoming release(s) will contain more functionality, bug fixes, and more (see Plans below for more details). From 48478125e0de9597159978040a7297bdb3a8d041 Mon Sep 17 00:00:00 2001 From: yitam Date: Thu, 8 Jun 2017 09:33:37 -0700 Subject: [PATCH 02/11] Updated odbc header constants --- source/shared/msodbcsql.h | 346 +++++++++++++++++++------------------- 1 file changed, 177 insertions(+), 169 deletions(-) diff --git a/source/shared/msodbcsql.h b/source/shared/msodbcsql.h index b853b9ad..9bd4c73b 100644 --- a/source/shared/msodbcsql.h +++ b/source/shared/msodbcsql.h @@ -36,7 +36,7 @@ #if !defined(SQLODBC_VER) -#define SQLODBC_VER 1100 +#define SQLODBC_VER 1300 #endif #if SQLODBC_VER >= 1300 @@ -46,7 +46,7 @@ #define SQLODBC_PRODUCT_NAME_SHORT_VER_ANSI "ODBC Driver 13 for SQL Server" #define SQLODBC_PRODUCT_NAME_SHORT_ANSI "ODBC Driver for SQL Server" -#endif /* SQLODBC_VER >= 1300 */ +#endif // SQLODBC_VER >= 1300 #define SQLODBC_PRODUCT_NAME_FULL_VER SQLODBC_PRODUCT_NAME_FULL_VER_ANSI #define SQLODBC_PRODUCT_NAME_FULL SQLODBC_PRODUCT_NAME_FULL_ANSI @@ -55,147 +55,145 @@ #define SQLODBC_DRIVER_NAME SQLODBC_PRODUCT_NAME_SHORT_VER -/* max SQL Server identifier length */ +// max SQL Server identifier length #define SQL_MAX_SQLSERVERNAME 128 -/* - * SQLSetConnectAttr driver specific defines. - * Microsoft has 1200 thru 1249 reserved for Microsoft ODBC Driver for SQL Server usage. - * Connection attributes - */ + +// SQLSetConnectAttr driver specific defines. +// Microsoft has 1200 thru 1249 reserved for Microsoft ODBC Driver for SQL Server usage. +// Connection attributes + #define SQL_COPT_SS_BASE 1200 -#define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) /* Force integrated security on login */ -#define SQL_COPT_SS_TRANSLATE (SQL_COPT_SS_BASE+20) /* Perform code page translation */ -#define SQL_COPT_SS_ENCRYPT (SQL_COPT_SS_BASE+23) /* Allow strong encryption for data */ -#define SQL_COPT_SS_MARS_ENABLED (SQL_COPT_SS_BASE+24) /* Multiple active result set per connection */ -#define SQL_COPT_SS_TXN_ISOLATION (SQL_COPT_SS_BASE+27) /* Used to set/get any driver-specific or ODBC-defined TXN iso level */ -#define SQL_COPT_SS_TRUST_SERVER_CERTIFICATE (SQL_COPT_SS_BASE+28) /* Trust server certificate */ -/* - * SQLSetStmtAttr Microsoft ODBC Driver for SQL Server specific defines. - * Statement attributes - */ +#define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) // Force integrated security on login +#define SQL_COPT_SS_TRANSLATE (SQL_COPT_SS_BASE+20) // Perform code page translation +#define SQL_COPT_SS_ENCRYPT (SQL_COPT_SS_BASE+23) // Allow strong encryption for data +#define SQL_COPT_SS_MARS_ENABLED (SQL_COPT_SS_BASE+24) // Multiple active result set per connection +#define SQL_COPT_SS_TXN_ISOLATION (SQL_COPT_SS_BASE+27) // Used to set/get any driver-specific or ODBC-defined TXN iso level +#define SQL_COPT_SS_TRUST_SERVER_CERTIFICATE (SQL_COPT_SS_BASE+28) // Trust server certificate + +// SQLSetStmtAttr Microsoft ODBC Driver for SQL Server specific defines. +// Statement attributes + #define SQL_SOPT_SS_BASE 1225 -#define SQL_SOPT_SS_TEXTPTR_LOGGING (SQL_SOPT_SS_BASE+0) /* Text pointer logging */ -#define SQL_SOPT_SS_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) /* Set NOBROWSETABLE option */ -#define SQL_SOPT_SS_COLUMN_ENCRYPTION (SQL_SOPT_SS_BASE+13)/* Sets the column encryption mode */ -/* Define old names */ +#define SQL_SOPT_SS_TEXTPTR_LOGGING (SQL_SOPT_SS_BASE+0) // Text pointer logging +#define SQL_SOPT_SS_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) // Set NOBROWSETABLE option +#define SQL_SOPT_SS_COLUMN_ENCRYPTION (SQL_SOPT_SS_BASE+13)// Sets the column encryption mode +// Define old names #define SQL_TEXTPTR_LOGGING SQL_SOPT_SS_TEXTPTR_LOGGING #define SQL_COPT_SS_BASE_EX 1240 -#define SQL_COPT_SS_WARN_ON_CP_ERROR (SQL_COPT_SS_BASE_EX+3) /* Issues warning when data from the server had a loss during code page conversion. */ -#define SQL_COPT_SS_CONNECTION_DEAD (SQL_COPT_SS_BASE_EX+4) /* dbdead SQLGetConnectOption only. It will try to ping the server. Expensive connection check */ -#define SQL_COPT_SS_APPLICATION_INTENT (SQL_COPT_SS_BASE_EX+7) /* Application Intent */ -#define SQL_COPT_SS_MULTISUBNET_FAILOVER (SQL_COPT_SS_BASE_EX+8) /* Multi-subnet Failover */ -#define SQL_COPT_SS_TNIR (SQL_COPT_SS_BASE_EX+9) /* Transparent Network IP Resolution */ -#define SQL_COPT_SS_COLUMN_ENCRYPTION (SQL_COPT_SS_BASE_EX+10) /* Always Encrypted Enabled or Disabled */ -#define SQL_COPT_SS_AEKEYSTOREPROVIDER (SQL_COPT_SS_BASE_EX+11) /* Load a keystore provider or read the list of loaded keystore providers */ -#define SQL_COPT_SS_AEKEYSTOREDATA (SQL_COPT_SS_BASE_EX+12) /* Communicate with a loaded keystore provider */ -#define SQL_COPT_SS_AETRUSTEDCMKPATHS (SQL_COPT_SS_BASE_EX+13) /* List of trusted CMK paths */ -#define SQL_COPT_SS_AECEKCACHETTL (SQL_COPT_SS_BASE_EX+14) /* Symmetric Key Cache TTL */ -#define SQL_COPT_SS_AUTHENTICATION (SQL_COPT_SS_BASE_EX+15) /* The authentication method used for the connection */ +#define SQL_COPT_SS_WARN_ON_CP_ERROR (SQL_COPT_SS_BASE_EX+3) // Issues warning when data from the server had a loss during code page conversion. +#define SQL_COPT_SS_CONNECTION_DEAD (SQL_COPT_SS_BASE_EX+4) // dbdead SQLGetConnectOption only. It will try to ping the server. Expensive connection check +#define SQL_COPT_SS_APPLICATION_INTENT (SQL_COPT_SS_BASE_EX+7) // Application Intent +#define SQL_COPT_SS_MULTISUBNET_FAILOVER (SQL_COPT_SS_BASE_EX+8) // Multi-subnet Failover +#define SQL_COPT_SS_TNIR (SQL_COPT_SS_BASE_EX+9) // Transparent Network IP Resolution +#define SQL_COPT_SS_COLUMN_ENCRYPTION (SQL_COPT_SS_BASE_EX+10)// Column Encryption Enabled or Disabled +#define SQL_COPT_SS_CEKEYSTOREPROVIDER (SQL_COPT_SS_BASE_EX+11)// Load a keystore provider or read the list of loaded keystore providers +#define SQL_COPT_SS_CEKEYSTOREDATA (SQL_COPT_SS_BASE_EX+12)// Communicate with loaded keystore providers +#define SQL_COPT_SS_TRUSTEDCMKPATHS (SQL_COPT_SS_BASE_EX+13)// List of trusted CMK paths +#define SQL_COPT_SS_CEKCACHETTL (SQL_COPT_SS_BASE_EX+14)// Symmetric Key Cache TTL +#define SQL_COPT_SS_AUTHENTICATION (SQL_COPT_SS_BASE_EX+15)// The authentication method used for the connection -/* - * SQLColAttributes driver specific defines. - * SQLSetDescField/SQLGetDescField driver specific defines. - * Microsoft has 1200 thru 1249 reserved for Microsoft ODBC Driver for SQL Server usage. - */ +// SQLColAttributes driver specific defines. +// SQLSetDescField/SQLGetDescField driver specific defines. +// Microsoft has 1200 thru 1249 reserved for Microsoft ODBC Driver for SQL Server usage. + #define SQL_CA_SS_BASE 1200 -#define SQL_CA_SS_COLUMN_SSTYPE (SQL_CA_SS_BASE+0) /* dbcoltype/dbalttype */ -#define SQL_CA_SS_COLUMN_UTYPE (SQL_CA_SS_BASE+1) /* dbcolutype/dbaltutype */ -#define SQL_CA_SS_NUM_ORDERS (SQL_CA_SS_BASE+2) /* dbnumorders */ -#define SQL_CA_SS_COLUMN_ORDER (SQL_CA_SS_BASE+3) /* dbordercol */ -#define SQL_CA_SS_COLUMN_VARYLEN (SQL_CA_SS_BASE+4) /* dbvarylen */ -#define SQL_CA_SS_NUM_COMPUTES (SQL_CA_SS_BASE+5) /* dbnumcompute */ -#define SQL_CA_SS_COMPUTE_ID (SQL_CA_SS_BASE+6) /* dbnextrow status return */ -#define SQL_CA_SS_COMPUTE_BYLIST (SQL_CA_SS_BASE+7) /* dbbylist */ -#define SQL_CA_SS_COLUMN_ID (SQL_CA_SS_BASE+8) /* dbaltcolid */ -#define SQL_CA_SS_COLUMN_OP (SQL_CA_SS_BASE+9) /* dbaltop */ -#define SQL_CA_SS_COLUMN_SIZE (SQL_CA_SS_BASE+10) /* dbcollen */ -#define SQL_CA_SS_COLUMN_HIDDEN (SQL_CA_SS_BASE+11) /* Column is hidden (FOR BROWSE) */ -#define SQL_CA_SS_COLUMN_KEY (SQL_CA_SS_BASE+12) /* Column is key column (FOR BROWSE) */ -#define SQL_CA_SS_COLUMN_COLLATION (SQL_CA_SS_BASE+14) /* Column collation (only for chars) */ +#define SQL_CA_SS_COLUMN_SSTYPE (SQL_CA_SS_BASE+0) // dbcoltype/dbalttype +#define SQL_CA_SS_COLUMN_UTYPE (SQL_CA_SS_BASE+1) // dbcolutype/dbaltutype +#define SQL_CA_SS_NUM_ORDERS (SQL_CA_SS_BASE+2) // dbnumorders +#define SQL_CA_SS_COLUMN_ORDER (SQL_CA_SS_BASE+3) // dbordercol +#define SQL_CA_SS_COLUMN_VARYLEN (SQL_CA_SS_BASE+4) // dbvarylen +#define SQL_CA_SS_NUM_COMPUTES (SQL_CA_SS_BASE+5) // dbnumcompute +#define SQL_CA_SS_COMPUTE_ID (SQL_CA_SS_BASE+6) // dbnextrow status return +#define SQL_CA_SS_COMPUTE_BYLIST (SQL_CA_SS_BASE+7) // dbbylist +#define SQL_CA_SS_COLUMN_ID (SQL_CA_SS_BASE+8) // dbaltcolid +#define SQL_CA_SS_COLUMN_OP (SQL_CA_SS_BASE+9) // dbaltop +#define SQL_CA_SS_COLUMN_SIZE (SQL_CA_SS_BASE+10) // dbcollen +#define SQL_CA_SS_COLUMN_HIDDEN (SQL_CA_SS_BASE+11) // Column is hidden (FOR BROWSE) +#define SQL_CA_SS_COLUMN_KEY (SQL_CA_SS_BASE+12) // Column is key column (FOR BROWSE) +#define SQL_CA_SS_COLUMN_COLLATION (SQL_CA_SS_BASE+14) // Column collation (only for chars) #define SQL_CA_SS_VARIANT_TYPE (SQL_CA_SS_BASE+15) #define SQL_CA_SS_VARIANT_SQL_TYPE (SQL_CA_SS_BASE+16) #define SQL_CA_SS_VARIANT_SERVER_TYPE (SQL_CA_SS_BASE+17) -/* XML, CLR UDT, and table valued parameter related metadata */ -#define SQL_CA_SS_UDT_CATALOG_NAME (SQL_CA_SS_BASE+18) /* UDT catalog name */ -#define SQL_CA_SS_UDT_SCHEMA_NAME (SQL_CA_SS_BASE+19) /* UDT schema name */ -#define SQL_CA_SS_UDT_TYPE_NAME (SQL_CA_SS_BASE+20) /* UDT type name */ -#define SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME (SQL_CA_SS_BASE+22) /* Name of the catalog that contains XML Schema collection */ -#define SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME (SQL_CA_SS_BASE+23) /* Name of the schema that contains XML Schema collection */ -#define SQL_CA_SS_XML_SCHEMACOLLECTION_NAME (SQL_CA_SS_BASE+24) /* Name of the XML Schema collection */ -#define SQL_CA_SS_CATALOG_NAME (SQL_CA_SS_BASE+25) /* Catalog name */ -#define SQL_CA_SS_SCHEMA_NAME (SQL_CA_SS_BASE+26) /* Schema name */ -#define SQL_CA_SS_TYPE_NAME (SQL_CA_SS_BASE+27) /* Type name */ +// XML, CLR UDT, and table valued parameter related metadata +#define SQL_CA_SS_UDT_CATALOG_NAME (SQL_CA_SS_BASE+18) // UDT catalog name +#define SQL_CA_SS_UDT_SCHEMA_NAME (SQL_CA_SS_BASE+19) // UDT schema name +#define SQL_CA_SS_UDT_TYPE_NAME (SQL_CA_SS_BASE+20) // UDT type name +#define SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME (SQL_CA_SS_BASE+22) // Name of the catalog that contains XML Schema collection +#define SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME (SQL_CA_SS_BASE+23) // Name of the schema that contains XML Schema collection +#define SQL_CA_SS_XML_SCHEMACOLLECTION_NAME (SQL_CA_SS_BASE+24) // Name of the XML Schema collection +#define SQL_CA_SS_CATALOG_NAME (SQL_CA_SS_BASE+25) // Catalog name +#define SQL_CA_SS_SCHEMA_NAME (SQL_CA_SS_BASE+26) // Schema name +#define SQL_CA_SS_TYPE_NAME (SQL_CA_SS_BASE+27) // Type name -/* table valued parameter related metadata */ -#define SQL_CA_SS_COLUMN_COMPUTED (SQL_CA_SS_BASE+29) /* column is computed */ -#define SQL_CA_SS_COLUMN_IN_UNIQUE_KEY (SQL_CA_SS_BASE+30) /* column is part of a unique key */ -#define SQL_CA_SS_COLUMN_SORT_ORDER (SQL_CA_SS_BASE+31) /* column sort order */ -#define SQL_CA_SS_COLUMN_SORT_ORDINAL (SQL_CA_SS_BASE+32) /* column sort ordinal */ -#define SQL_CA_SS_COLUMN_HAS_DEFAULT_VALUE (SQL_CA_SS_BASE+33) /* column has default value for all rows of the table valued parameter */ +// table valued parameter related metadata +#define SQL_CA_SS_COLUMN_COMPUTED (SQL_CA_SS_BASE+29) // column is computed +#define SQL_CA_SS_COLUMN_IN_UNIQUE_KEY (SQL_CA_SS_BASE+30) // column is part of a unique key +#define SQL_CA_SS_COLUMN_SORT_ORDER (SQL_CA_SS_BASE+31) // column sort order +#define SQL_CA_SS_COLUMN_SORT_ORDINAL (SQL_CA_SS_BASE+32) // column sort ordinal +#define SQL_CA_SS_COLUMN_HAS_DEFAULT_VALUE (SQL_CA_SS_BASE+33) // column has default value for all rows of the table valued parameter -/* sparse column related metadata */ -#define SQL_CA_SS_IS_COLUMN_SET (SQL_CA_SS_BASE+34) /* column is a column-set column for sparse columns */ +// sparse column related metadata +#define SQL_CA_SS_IS_COLUMN_SET (SQL_CA_SS_BASE+34) // column is a column-set column for sparse columns -/* Legacy datetime related metadata */ -#define SQL_CA_SS_SERVER_TYPE (SQL_CA_SS_BASE+35) /* column type to send on the wire for datetime types */ +// Legacy datetime related metadata +#define SQL_CA_SS_SERVER_TYPE (SQL_CA_SS_BASE+35) // column type to send on the wire for datetime types -/* force column encryption */ -#define SQL_CA_SS_FORCE_ENCRYPT (SQL_CA_SS_BASE+36) /* indicate mandatory encryption for this parameter */ +// force column encryption +#define SQL_CA_SS_FORCE_ENCRYPT (SQL_CA_SS_BASE+36) // indicate mandatory encryption for this parameter -/* Defines for use with SQL_COPT_SS_INTEGRATED_SECURITY - Pre-Connect Option only */ -#define SQL_IS_OFF 0L /* Integrated security isn't used */ -#define SQL_IS_ON 1L /* Integrated security is used */ +#define SQL_CA_SS_MAX_USED (SQL_CA_SS_BASE+37) +// Defines for use with SQL_COPT_SS_INTEGRATED_SECURITY - Pre-Connect Option only +#define SQL_IS_OFF 0L // Integrated security isn't used +#define SQL_IS_ON 1L // Integrated security is used #define SQL_IS_DEFAULT SQL_IS_OFF -/* Defines for use with SQL_COPT_SS_TRANSLATE */ -#define SQL_XL_OFF 0L /* Code page translation is not performed */ -#define SQL_XL_ON 1L /* Code page translation is performed */ +// Defines for use with SQL_COPT_SS_TRANSLATE +#define SQL_XL_OFF 0L // Code page translation is not performed +#define SQL_XL_ON 1L // Code page translation is performed #define SQL_XL_DEFAULT SQL_XL_ON -/* Defines for use with SQL_SOPT_SS_TEXTPTR_LOGGING */ -#define SQL_TL_OFF 0L /* No logging on text pointer ops */ -#define SQL_TL_ON 1L /* Logging occurs on text pointer ops */ +// Defines for use with SQL_SOPT_SS_TEXTPTR_LOGGING +#define SQL_TL_OFF 0L // No logging on text pointer ops +#define SQL_TL_ON 1L // Logging occurs on text pointer ops #define SQL_TL_DEFAULT SQL_TL_ON -/* Defines for use with SQL_SOPT_SS_NOBROWSETABLE */ -#define SQL_NB_OFF 0L /* NO_BROWSETABLE is off */ -#define SQL_NB_ON 1L /* NO_BROWSETABLE is on */ +// Defines for use with SQL_SOPT_SS_NOBROWSETABLE +#define SQL_NB_OFF 0L // NO_BROWSETABLE is off +#define SQL_NB_ON 1L // NO_BROWSETABLE is on #define SQL_NB_DEFAULT SQL_NB_OFF -/* Defines for use with SQL_SOPT_SS_COLUMN_ENCRYPTION */ -#define SQL_CE_DISABLED 0L /* Disabled */ -#define SQL_CE_RESULTSETONLY 1L /* Decryption Only (resultsets and return values) */ -#define SQL_CE_ENABLED 3L /* Enabled (both encryption and decryption) */ - -/* SQL_COPT_SS_ENCRYPT */ +// Defines for use with SQL_SOPT_SS_COLUMN_ENCRYPTION +#define SQL_CE_DISABLED 0L // Disabled +#define SQL_CE_RESULTSETONLY 1L // Decryption Only (resultsets and return values) +#define SQL_CE_ENABLED 3L // Enabled (both encryption and decryption) + // Defines for use with SQL_COPT_SS_COLUMN_ENCRYPTION +#define SQL_COLUMN_ENCRYPTION_DISABLE 0L +#define SQL_COLUMN_ENCRYPTION_ENABLE 1L +#define SQL_COLUMN_ENCRYPTION_DEFAULT SQL_COLUMN_ENCRYPTION_DISABLE + // Defines for use with SQL_COPT_SS_CEKCACHETTL +#define SQL_CEKCACHETTL_DEFAULT 7200L // TTL value in seconds (2 hours) +// SQL_COPT_SS_ENCRYPT #define SQL_EN_OFF 0L #define SQL_EN_ON 1L -/* SQL_COPT_SS_TRUST_SERVER_CERTIFICATE */ +// SQL_COPT_SS_TRUST_SERVER_CERTIFICATE #define SQL_TRUST_SERVER_CERTIFICATE_NO 0L #define SQL_TRUST_SERVER_CERTIFICATE_YES 1L -/* SQL_COPT_SS_WARN_ON_CP_ERROR */ +// SQL_COPT_SS_WARN_ON_CP_ERROR #define SQL_WARN_NO 0L #define SQL_WARN_YES 1L -/* SQL_COPT_SS_MARS_ENABLED */ +// SQL_COPT_SS_MARS_ENABLED #define SQL_MARS_ENABLED_NO 0L #define SQL_MARS_ENABLED_YES 1L -/* SQL_TXN_ISOLATION_OPTION bitmasks */ +// SQL_TXN_ISOLATION_OPTION bitmasks #define SQL_TXN_SS_SNAPSHOT 0x00000020L -/* SQL_COPT_SS_COLUMN_ENCRYPTION */ -#define SQL_COLUMN_ENCRYPTION_DISABLE 0L -#define SQL_COLUMN_ENCRYPTION_ENABLE 1L -#define SQL_COLUMN_ENCRYPTION_DEFAULT SQL_COLUMN_ENCRYPTION_DISABLE -// Defines for use with SQL_COPT_SS_AECEKCACHETTL -#define SQL_AECEKCACHETTL_DEFAULT 7200L // TTL value in seconds (2 hours) -/* The following are defines for SQL_CA_SS_COLUMN_SORT_ORDER */ +// The following are defines for SQL_CA_SS_COLUMN_SORT_ORDER #define SQL_SS_ORDER_UNSPECIFIED 0L #define SQL_SS_DESCENDING_ORDER 1L #define SQL_SS_ASCENDING_ORDER 2L #define SQL_SS_ORDER_DEFAULT SQL_SS_ORDER_UNSPECIFIED -/* - * Driver specific SQL data type defines. - * Microsoft has -150 thru -199 reserved for Microsoft ODBC Driver for SQL Server usage. - */ +// Driver specific SQL data type defines. +// Microsoft has -150 thru -199 reserved for Microsoft ODBC Driver for SQL Server usage. + #define SQL_SS_VARIANT (-150) #define SQL_SS_UDT (-151) #define SQL_SS_XML (-152) @@ -203,24 +201,22 @@ #define SQL_SS_TIME2 (-154) #define SQL_SS_TIMESTAMPOFFSET (-155) -/* Local types to be used with SQL_CA_SS_SERVER_TYPE */ +// Local types to be used with SQL_CA_SS_SERVER_TYPE #define SQL_SS_TYPE_DEFAULT 0L #define SQL_SS_TYPE_SMALLDATETIME 1L #define SQL_SS_TYPE_DATETIME 2L -/* Extended C Types range 4000 and above. Range of -100 thru 200 is reserved by Driver Manager. */ +// Extended C Types range 4000 and above. Range of -100 thru 200 is reserved by Driver Manager. #define SQL_C_TYPES_EXTENDED 0x04000L -/* - * SQL_SS_LENGTH_UNLIMITED is used to describe the max length of - * VARCHAR(max), VARBINARY(max), NVARCHAR(max), and XML columns - */ +// SQL_SS_LENGTH_UNLIMITED is used to describe the max length of +// VARCHAR(max), VARBINARY(max), NVARCHAR(max), and XML columns + #define SQL_SS_LENGTH_UNLIMITED 0 -/* - * User Data Type definitions. - * Returned by SQLColAttributes/SQL_CA_SS_COLUMN_UTYPE. - */ +// User Data Type definitions. +// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_UTYPE. + #define SQLudtBINARY 3 #define SQLudtBIT 16 #define SQLudtBITN 0 @@ -250,35 +246,35 @@ #define SQLudtVARBINARY 4 #define SQLudtVARCHAR 2 #define MIN_USER_DATATYPE 256 -/* - * Aggregate operator types. - * Returned by SQLColAttributes/SQL_CA_SS_COLUMN_OP. - */ -#define SQLAOPSTDEV 0x30 /* Standard deviation */ -#define SQLAOPSTDEVP 0x31 /* Standard deviation population */ -#define SQLAOPVAR 0x32 /* Variance */ -#define SQLAOPVARP 0x33 /* Variance population */ -#define SQLAOPCNT 0x4b /* Count */ -#define SQLAOPSUM 0x4d /* Sum */ -#define SQLAOPAVG 0x4f /* Average */ -#define SQLAOPMIN 0x51 /* Min */ -#define SQLAOPMAX 0x52 /* Max */ -#define SQLAOPANY 0x53 /* Any */ -#define SQLAOPNOOP 0x56 /* None */ -/* - * SQLGetDiagField driver specific defines. - * Microsoft has -1150 thru -1199 reserved for Microsoft ODBC Driver for SQL Server usage. - */ + +// Aggregate operator types. +// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_OP. + +#define SQLAOPSTDEV 0x30 // Standard deviation +#define SQLAOPSTDEVP 0x31 // Standard deviation population +#define SQLAOPVAR 0x32 // Variance +#define SQLAOPVARP 0x33 // Variance population +#define SQLAOPCNT 0x4b // Count +#define SQLAOPSUM 0x4d // Sum +#define SQLAOPAVG 0x4f // Average +#define SQLAOPMIN 0x51 // Min +#define SQLAOPMAX 0x52 // Max +#define SQLAOPANY 0x53 // Any +#define SQLAOPNOOP 0x56 // None + +// SQLGetDiagField driver specific defines. +// Microsoft has -1150 thru -1199 reserved for Microsoft ODBC Driver for SQL Server usage. + #define SQL_DIAG_SS_BASE (-1150) #define SQL_DIAG_SS_MSGSTATE (SQL_DIAG_SS_BASE) #define SQL_DIAG_SS_SEVERITY (SQL_DIAG_SS_BASE-1) #define SQL_DIAG_SS_SRVNAME (SQL_DIAG_SS_BASE-2) #define SQL_DIAG_SS_PROCNAME (SQL_DIAG_SS_BASE-3) #define SQL_DIAG_SS_LINE (SQL_DIAG_SS_BASE-4) -/* - * SQLGetDiagField/SQL_DIAG_DYNAMIC_FUNCTION_CODE driver specific defines. - * Microsoft has -200 thru -299 reserved for Microsoft ODBC Driver for SQL Server usage. - */ + +// SQLGetDiagField/SQL_DIAG_DYNAMIC_FUNCTION_CODE driver specific defines. +// Microsoft has -200 thru -299 reserved for Microsoft ODBC Driver for SQL Server usage. + #define SQL_DIAG_DFC_SS_BASE (-200) #define SQL_DIAG_DFC_SS_ALTER_DATABASE (SQL_DIAG_DFC_SS_BASE-0) #define SQL_DIAG_DFC_SS_CHECKPOINT (SQL_DIAG_DFC_SS_BASE-1) @@ -343,7 +339,7 @@ #define SQL_DIAG_DFC_SS_SET_XCTLVL (SQL_DIAG_DFC_SS_BASE-55) #define SQL_DIAG_DFC_SS_MERGE (SQL_DIAG_DFC_SS_BASE-56) -/* Severity codes for SQL_DIAG_SS_SEVERITY */ +// Severity codes for SQL_DIAG_SS_SEVERITY #define EX_ANY 0 #define EX_INFO 10 #define EX_MAXISEVERITY EX_INFO @@ -365,57 +361,68 @@ #define EX_HARDWARE 24 #define EX_CONTROL 25 -/* Keystore Provider interface definition */ +// Keystore Provider interface definition +typedef struct CEKeystoreContext +{ + void *envCtx; + void *dbcCtx; + void *stmtCtx; +} CEKEYSTORECONTEXT; -typedef void errFunc(void *ctx, const wchar_t *msg, ...); +typedef void errFunc(CEKEYSTORECONTEXT *ctx, const wchar_t *msg, ...); #define IDS_MSG(x) ((const wchar_t*)(x)) -typedef struct AEKeystoreProvider +typedef struct CEKeystoreProvider { wchar_t *Name; - int (*Init)(void *ctx, errFunc *onError); - int (*Read)(void *ctx, errFunc *onError, void *data, unsigned int *len); - int (*Write)(void *ctx, errFunc *onError, void *data, unsigned int len); - int (*DecryptCEK)( - void *ctx, + int (__stdcall *Init)(CEKEYSTORECONTEXT *ctx, errFunc *onError); + int (__stdcall *Read)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int *len); + int (__stdcall *Write)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int len); + int (__stdcall *DecryptCEK)( + CEKEYSTORECONTEXT *ctx, errFunc *onError, const wchar_t *keyPath, const wchar_t *alg, unsigned char *ecek, - unsigned short ecek_len, - unsigned char **cek_out, - unsigned short *cek_len); - void (*Free)(); -} AEKEYSTOREPROVIDER; + unsigned short ecekLen, + unsigned char **cekOut, + unsigned short *cekLen); + void (__stdcall *Free)(); +} CEKEYSTOREPROVIDER; + +// Data is defined to be past the end of the structure header. +// This is accepted by MSVC, GCC, and C99 standard but former emits +// unnecessary warning, hence it has to be disabled. -/* Data is defined to be past the end of the structure header. - This is accepted by MSVC, GCC, and C99 standard but former emits - unnecessary warning, hence it has to be disabled. -*/ #if defined(_MSC_VER) #pragma warning(push) #pragma warning(disable:4200) #endif -typedef struct AEKeystoreData +typedef struct CEKeystoreData { - wchar_t *Name; + wchar_t *name; unsigned int dataSize; - char Data[]; -} AEKEYSTOREPROVIDERDATA; + char data[]; +} CEKEYSTOREDATA; #if defined(_MSC_VER) #pragma warning(pop) #endif -/* The following constants are for the Azure Key Vault configuration interface */ -#define AKV_CONFIG_FLAGS 0 -#define AKVCFG_USECLIENTID 0x00000001 -#define AKVCFG_AUTORENEW 0x00000002 +// The following constants are for the Azure Key Vault configuration interface +#define AKV_CONFIG_FLAGS 0 + #define AKVCFG_AUTHMODE 0x0000000F + #define AKVCFG_AUTHMODE_ACCESSTOKEN 0 + #define AKVCFG_AUTHMODE_CLIENTKEY 1 + #define AKVCFG_AUTHMODE_PASSWORD 2 + #define AKVCFG_AUTHMODE_INTEGRATED 3 + #define AKVCFG_AUTHMODE_CERTIFICATE 4 + #define AKVCFG_NOAUTORENEW 0x00000010 -#define AKV_CONFIG_CLIENTID 1 -#define AKV_CONFIG_CLIENTKEY 2 +#define AKV_CONFIG_PRINCIPALID 1 +#define AKV_CONFIG_AUTHSECRET 2 #define AKV_CONFIG_ACCESSTOKEN 3 #define AKV_CONFIG_TOKENEXPIRY 4 @@ -424,5 +431,6 @@ typedef struct AEKeystoreData #define AKV_CONFIG_RETRYTIMEOUT 6 #define AKV_CONFIG_RETRYWAIT 7 -#endif /* __msodbcsql_h__ */ +#define AKV_CONFIG_RESET 255 +#endif // __msodbcsql_h__ From 74800c993cc4655e86ed4d3b7bcb922130d1448e Mon Sep 17 00:00:00 2001 From: yitam Date: Thu, 8 Jun 2017 11:59:34 -0700 Subject: [PATCH 03/11] fixed CEKeystoreProvider interface --- source/shared/msodbcsql.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/shared/msodbcsql.h b/source/shared/msodbcsql.h index 9bd4c73b..1b5f3f5a 100644 --- a/source/shared/msodbcsql.h +++ b/source/shared/msodbcsql.h @@ -376,10 +376,10 @@ typedef void errFunc(CEKEYSTORECONTEXT *ctx, const wchar_t *msg, ...); typedef struct CEKeystoreProvider { wchar_t *Name; - int (__stdcall *Init)(CEKEYSTORECONTEXT *ctx, errFunc *onError); - int (__stdcall *Read)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int *len); - int (__stdcall *Write)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int len); - int (__stdcall *DecryptCEK)( + int (*Init)(CEKEYSTORECONTEXT *ctx, errFunc *onError); + int (*Read)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int *len); + int (*Write)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int len); + int (*DecryptCEK)( CEKEYSTORECONTEXT *ctx, errFunc *onError, const wchar_t *keyPath, @@ -388,7 +388,16 @@ typedef struct CEKeystoreProvider unsigned short ecekLen, unsigned char **cekOut, unsigned short *cekLen); - void (__stdcall *Free)(); + int (*EncryptCEK)( + CEKEYSTORECONTEXT *ctx, + errFunc *onError, + const wchar_t *keyPath, + const wchar_t *alg, + unsigned char *cek, + unsigned short cekLen, + unsigned char **ecekOut, + unsigned short *ecekLen); + void (*Free)(); } CEKEYSTOREPROVIDER; // Data is defined to be past the end of the structure header. From 7c105ac08e217d2dbf0e6a93eb552aa4a86b0b78 Mon Sep 17 00:00:00 2001 From: yitam Date: Thu, 8 Jun 2017 12:02:12 -0700 Subject: [PATCH 04/11] added a comment about this file being a subset --- source/shared/msodbcsql.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/shared/msodbcsql.h b/source/shared/msodbcsql.h index 1b5f3f5a..cc97d5e1 100644 --- a/source/shared/msodbcsql.h +++ b/source/shared/msodbcsql.h @@ -4,7 +4,7 @@ //--------------------------------------------------------------------------------------------------------------------------------- // File: msodbcsql.h // -// Contents: Routines that use statement handles +// Contents: Routines that use statement handles. This is a subset of the header file msodbcsql.h in the ODBC Driver. // // Contents: This SDK is not supported under any Microsoft standard support // program or service. The information is provided AS IS without From 1afc5091257a703aa92e75ce3b7bb77f8a6f893a Mon Sep 17 00:00:00 2001 From: yitam Date: Thu, 8 Jun 2017 15:21:50 -0700 Subject: [PATCH 05/11] removed unnecessary definitions --- source/shared/msodbcsql.h | 61 +++++++-------------------------------- 1 file changed, 10 insertions(+), 51 deletions(-) diff --git a/source/shared/msodbcsql.h b/source/shared/msodbcsql.h index cc97d5e1..0528acb9 100644 --- a/source/shared/msodbcsql.h +++ b/source/shared/msodbcsql.h @@ -361,45 +361,6 @@ #define EX_HARDWARE 24 #define EX_CONTROL 25 -// Keystore Provider interface definition -typedef struct CEKeystoreContext -{ - void *envCtx; - void *dbcCtx; - void *stmtCtx; -} CEKEYSTORECONTEXT; - -typedef void errFunc(CEKEYSTORECONTEXT *ctx, const wchar_t *msg, ...); - -#define IDS_MSG(x) ((const wchar_t*)(x)) - -typedef struct CEKeystoreProvider -{ - wchar_t *Name; - int (*Init)(CEKEYSTORECONTEXT *ctx, errFunc *onError); - int (*Read)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int *len); - int (*Write)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int len); - int (*DecryptCEK)( - CEKEYSTORECONTEXT *ctx, - errFunc *onError, - const wchar_t *keyPath, - const wchar_t *alg, - unsigned char *ecek, - unsigned short ecekLen, - unsigned char **cekOut, - unsigned short *cekLen); - int (*EncryptCEK)( - CEKEYSTORECONTEXT *ctx, - errFunc *onError, - const wchar_t *keyPath, - const wchar_t *alg, - unsigned char *cek, - unsigned short cekLen, - unsigned char **ecekOut, - unsigned short *ecekLen); - void (*Free)(); -} CEKEYSTOREPROVIDER; - // Data is defined to be past the end of the structure header. // This is accepted by MSVC, GCC, and C99 standard but former emits // unnecessary warning, hence it has to be disabled. @@ -421,21 +382,19 @@ typedef struct CEKeystoreData #endif // The following constants are for the Azure Key Vault configuration interface -#define AKV_CONFIG_FLAGS 0 - #define AKVCFG_AUTHMODE 0x0000000F - #define AKVCFG_AUTHMODE_ACCESSTOKEN 0 - #define AKVCFG_AUTHMODE_CLIENTKEY 1 - #define AKVCFG_AUTHMODE_PASSWORD 2 - #define AKVCFG_AUTHMODE_INTEGRATED 3 - #define AKVCFG_AUTHMODE_CERTIFICATE 4 - #define AKVCFG_NOAUTORENEW 0x00000010 +#define AKV_CONFIG_FLAGS 0 +#define AKVCFG_AUTHMODE 0x0000000F +#define AKVCFG_AUTHMODE_ACCESSTOKEN 0 +#define AKVCFG_AUTHMODE_CLIENTKEY 1 +#define AKVCFG_AUTHMODE_PASSWORD 2 +#define AKVCFG_AUTHMODE_INTEGRATED 3 +#define AKVCFG_AUTHMODE_CERTIFICATE 4 +#define AKVCFG_NOAUTORENEW 0x00000010 #define AKV_CONFIG_PRINCIPALID 1 #define AKV_CONFIG_AUTHSECRET 2 - -#define AKV_CONFIG_ACCESSTOKEN 3 -#define AKV_CONFIG_TOKENEXPIRY 4 - +#define AKV_CONFIG_ACCESSTOKEN 3 +#define AKV_CONFIG_TOKENEXPIRY 4 #define AKV_CONFIG_MAXRETRIES 5 #define AKV_CONFIG_RETRYTIMEOUT 6 #define AKV_CONFIG_RETRYWAIT 7 From 25e7705249bea5e9da8a1be15bb2bee6b7b452bc Mon Sep 17 00:00:00 2001 From: yitam Date: Thu, 8 Jun 2017 15:45:22 -0700 Subject: [PATCH 06/11] added a comment for CEKeystoreData --- source/shared/msodbcsql.h | 1 + 1 file changed, 1 insertion(+) diff --git a/source/shared/msodbcsql.h b/source/shared/msodbcsql.h index 0528acb9..e970c0ac 100644 --- a/source/shared/msodbcsql.h +++ b/source/shared/msodbcsql.h @@ -370,6 +370,7 @@ #pragma warning(disable:4200) #endif +// Communication between the driver and application via the CEKeystoreData structure typedef struct CEKeystoreData { wchar_t *name; From f38d57b7f7d46faf199f7747f238432681abdcd8 Mon Sep 17 00:00:00 2001 From: yitam Date: Mon, 12 Jun 2017 10:51:23 -0700 Subject: [PATCH 07/11] Azure AD tests using ActiveDirectoryPassword --- test/pdo_sqlsrv/MsSetup.inc | 5 ++ .../pdo_azure_ad_authentication.phpt | 48 +++++++++++++++--- test/sqlsrv/MsSetup.inc | 5 ++ .../sqlsrv_azure_ad_authentication.phpt | 49 ++++++++++++++++--- 4 files changed, 95 insertions(+), 12 deletions(-) diff --git a/test/pdo_sqlsrv/MsSetup.inc b/test/pdo_sqlsrv/MsSetup.inc index a9d03002..96343778 100644 --- a/test/pdo_sqlsrv/MsSetup.inc +++ b/test/pdo_sqlsrv/MsSetup.inc @@ -21,6 +21,11 @@ if (isset($_ENV['MSSQL_SERVER']) || isset($_ENV['MSSQL_USER']) || isset($_ENV['M $DriverName = "ODBC Driver 11 for SQL Server"; } +$adServer = 'TARGET_AD_SERVER'; +$adDatabase = 'TARGET_AD_DATABASE'; +$adUser = 'TARGET_AD_USERNAME'; +$adPassword = 'TARGET_AD_PASSWORD'; + $driverType = true; $PhpDriver = "ODBC Driver 11 for SQL Server"; diff --git a/test/pdo_sqlsrv/pdo_azure_ad_authentication.phpt b/test/pdo_sqlsrv/pdo_azure_ad_authentication.phpt index c3ba3bf3..9ec93b1b 100644 --- a/test/pdo_sqlsrv/pdo_azure_ad_authentication.phpt +++ b/test/pdo_sqlsrv/pdo_azure_ad_authentication.phpt @@ -1,11 +1,14 @@ --TEST-- -Test the Authentication keyword with options SqlPassword and ActiveDirectoryIntegrated. +Test the Authentication keyword and three options: SqlPassword, ActiveDirectoryIntegrated, and ActiveDirectoryPassword. --SKIPIF-- - + --FILE-- getMessage() ); + echo "\n"; + } +} +else +{ + echo "Not testing with Authentication=ActiveDirectoryPassword.\n"; +} ?> ---EXPECT-- +--EXPECTF-- Connected successfully with Authentication=SqlPassword. array(2) { [""]=> @@ -60,4 +94,6 @@ array(2) { string(1) "7" } Could not connect with Authentication=ActiveDirectoryIntegrated. -SQLSTATE[IMSSP]: Invalid option for the Authentication keyword. Only SqlPassword or ActiveDirectoryPassword is supported. \ No newline at end of file +SQLSTATE[IMSSP]: Invalid option for the Authentication keyword. Only SqlPassword or ActiveDirectoryPassword is supported. +%s with Authentication=ActiveDirectoryPassword. + diff --git a/test/sqlsrv/MsSetup.inc b/test/sqlsrv/MsSetup.inc index ffa85fbc..2b0f02a8 100644 --- a/test/sqlsrv/MsSetup.inc +++ b/test/sqlsrv/MsSetup.inc @@ -25,6 +25,11 @@ $marsMode = true; $traceEnabled = false; +$adServer = 'TARGET_AD_SERVER'; +$adDatabase = 'TARGET_AD_DATABASE'; +$adUser = 'TARGET_AD_USERNAME'; +$adPassword = 'TARGET_AD_PASSWORD'; + if (isset($_ENV['MSSQL_SERVER']) || isset($_ENV['MSSQL_USER']) || isset($_ENV['MSSQL_PASSWORD'])) { $server = $_ENV['MSSQL_SERVER']; $uid = $_ENV['MSSQL_USER']; diff --git a/test/sqlsrv/sqlsrv_azure_ad_authentication.phpt b/test/sqlsrv/sqlsrv_azure_ad_authentication.phpt index df11faf1..b23a9f1c 100644 --- a/test/sqlsrv/sqlsrv_azure_ad_authentication.phpt +++ b/test/sqlsrv/sqlsrv_azure_ad_authentication.phpt @@ -1,11 +1,14 @@ --TEST-- -Test the Authentication keyword with options SqlPassword and ActiveDirectoryIntegrated. +Test the Authentication keyword and three options: SqlPassword, ActiveDirectoryIntegrated, and ActiveDirectoryPassword. --SKIPIF-- - + --FILE-- $databaseName, "UID"=>$uid, "PWD"=>$pwd, "Authentication"=>'SqlPassword', "TrustServerCertificate"=>true); @@ -35,8 +38,10 @@ else sqlsrv_free_stmt( $stmt ); sqlsrv_close( $conn ); -//////////////////////////////////////// - +/////////////////////////////////////////////////////////////////////////////////////////// +// Test Azure AD with integrated authentication. This should fail because +// we don't support it. +// $connectionInfo = array( "Authentication"=>"ActiveDirectoryIntegrated", "TrustServerCertificate"=>true ); $conn = sqlsrv_connect( $server, $connectionInfo ); @@ -52,8 +57,38 @@ else sqlsrv_close( $conn ); } +/////////////////////////////////////////////////////////////////////////////////////////// +// Test Azure AD on an Azure database instance. Replace $azureServer, etc with +// your credentials to test, or this part is skipped. +// +$azureServer = $adServer; +$azureDatabase = $adDatabase; +$azureUsername = $adUser; +$azurePassword = $adPassword; + +if ($azureServer != 'TARGET_AD_SERVER') +{ + $connectionInfo = array( "UID"=>$azureUsername, "PWD"=>$azurePassword, + "Authentication"=>'ActiveDirectoryPassword', "TrustServerCertificate"=>true ); + + $conn = sqlsrv_connect( $azureServer, $connectionInfo ); + if( $conn === false ) + { + echo "Could not connect with ActiveDirectoryPassword.\n"; + print_r( sqlsrv_errors() ); + } + else + { + echo "Connected successfully with Authentication=ActiveDirectoryPassword.\n"; + sqlsrv_close( $conn ); + } +} +else +{ + echo "Not testing with Authentication=ActiveDirectoryPassword.\n"; +} ?> ---EXPECT-- +--EXPECTF-- Connected successfully with Authentication=SqlPassword. array(2) { [0]=> @@ -70,4 +105,6 @@ Array [code] => -62 [2] => Invalid option for the Authentication keyword. Only SqlPassword or ActiveDirectoryPassword is supported. [message] => Invalid option for the Authentication keyword. Only SqlPassword or ActiveDirectoryPassword is supported. -) \ No newline at end of file +) +%s with Authentication=ActiveDirectoryPassword. + From b9b785dd9a54c58adcc27eddcca70afb1d597dd0 Mon Sep 17 00:00:00 2001 From: yitam Date: Tue, 13 Jun 2017 11:45:48 -0700 Subject: [PATCH 08/11] fixed BVT tests to run on Linux/Mac --- .../msdn_pdo_getAvailableDrivers.phpt | 15 ++++++---- test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt | 4 +-- test/bvt/sqlsrv/msdn_sqlsrv_configure_2.phpt | 30 ++++++++++--------- test/bvt/sqlsrv/msdn_sqlsrv_server_info.phpt | 4 +-- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/test/bvt/pdo_sqlsrv/msdn_pdo_getAvailableDrivers.phpt b/test/bvt/pdo_sqlsrv/msdn_pdo_getAvailableDrivers.phpt index fbaaede6..7db00eea 100644 --- a/test/bvt/pdo_sqlsrv/msdn_pdo_getAvailableDrivers.phpt +++ b/test/bvt/pdo_sqlsrv/msdn_pdo_getAvailableDrivers.phpt @@ -1,13 +1,16 @@ --TEST-- -returns an array of PDO drivers +check if sqlsrv is in the array of available PDO drivers --SKIPIF-- --FILE-- --EXPECT-- -Array -( - [0] => sqlsrv -) \ No newline at end of file +sqlsrv found +Done \ No newline at end of file diff --git a/test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt b/test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt index 27364fee..69b53eae 100644 --- a/test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt +++ b/test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt @@ -14,7 +14,7 @@ if( $conn === false ) } /* Prepare and execute the query. */ -$tsql = "SELECT OrderQty, UnitPrice FROM Sales.SalesOrderDetail"; +$tsql = "SELECT OrderQty, UnitPrice FROM Sales.SalesOrderDetail ORDER BY SalesOrderID"; $stmt = sqlsrv_prepare( $conn, $tsql); if( $stmt === false ) { @@ -46,4 +46,4 @@ echo "$count sales accounted for the first $$salesTotal in revenue.\n"; sqlsrv_cancel( $stmt); ?> --EXPECT-- -57 sales accounted for the first $104171.7607 in revenue. \ No newline at end of file +58 sales accounted for the first $104205.9607 in revenue. \ No newline at end of file diff --git a/test/bvt/sqlsrv/msdn_sqlsrv_configure_2.phpt b/test/bvt/sqlsrv/msdn_sqlsrv_configure_2.phpt index 1920cc48..de78bcff 100644 --- a/test/bvt/sqlsrv/msdn_sqlsrv_configure_2.phpt +++ b/test/bvt/sqlsrv/msdn_sqlsrv_configure_2.phpt @@ -2,7 +2,6 @@ disables the default error-handling behaviour using configure and returns warnings --SKIPIF-- -?> --FILE-- --EXPECTREGEX-- diff --git a/test/bvt/sqlsrv/msdn_sqlsrv_server_info.phpt b/test/bvt/sqlsrv/msdn_sqlsrv_server_info.phpt index 4d15718b..c15096b5 100644 --- a/test/bvt/sqlsrv/msdn_sqlsrv_server_info.phpt +++ b/test/bvt/sqlsrv/msdn_sqlsrv_server_info.phpt @@ -31,5 +31,5 @@ else /* Free connection resources. */ sqlsrv_close( $conn); ?> ---EXPECT-- -CurrentDatabase: AdventureWorks2014
SQLServerVersion: 12.00.4100
SQLServerName: SQL-2K14-SP1-1
\ No newline at end of file +--EXPECTREGEX-- +CurrentDatabase: AdventureWorks.*
SQLServerVersion: 1[2-9].00.[0-9]{4}
SQLServerName: SQL.+
\ No newline at end of file From 86865163259e5442df070845d41c25af3c32eab0 Mon Sep 17 00:00:00 2001 From: yitam Date: Tue, 13 Jun 2017 12:07:27 -0700 Subject: [PATCH 09/11] Modified Readme text files --- test/bvt/pdo_sqlsrv/readme.txt | 5 ++++- test/bvt/sqlsrv/readme.txt | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/bvt/pdo_sqlsrv/readme.txt b/test/bvt/pdo_sqlsrv/readme.txt index 191a4092..43f4a9cc 100644 --- a/test/bvt/pdo_sqlsrv/readme.txt +++ b/test/bvt/pdo_sqlsrv/readme.txt @@ -1,4 +1,7 @@ This folder mainly contains tests that are derived from the code examples on https://docs.microsoft.com/en-us/sql/connect/php/pdo-class -https://docs.microsoft.com/en-us/sql/connect/php/pdostatement-class \ No newline at end of file +https://docs.microsoft.com/en-us/sql/connect/php/pdostatement-class + +Modify connect.inc with the real credentials to run the tests, using the latest run-tests.php from +https://raw.githubusercontent.com/php/php-src/master/run-tests.php \ No newline at end of file diff --git a/test/bvt/sqlsrv/readme.txt b/test/bvt/sqlsrv/readme.txt index 1fc27ef1..d1a2c766 100644 --- a/test/bvt/sqlsrv/readme.txt +++ b/test/bvt/sqlsrv/readme.txt @@ -1,3 +1,6 @@ This folder mainly contains tests that are derived from the code examples on -https://docs.microsoft.com/en-us/sql/connect/php/sqlsrv-driver-api-reference \ No newline at end of file +https://docs.microsoft.com/en-us/sql/connect/php/sqlsrv-driver-api-reference + +Modify connect.inc with the real credentials to run the tests, using the latest run-tests.php from +https://raw.githubusercontent.com/php/php-src/master/run-tests.php \ No newline at end of file From 3548b3495668109d0fd4340459cd78c3d6e43547 Mon Sep 17 00:00:00 2001 From: yitam Date: Thu, 15 Jun 2017 16:47:08 -0700 Subject: [PATCH 10/11] fixed regex for expected error messages --- test/sqlsrv/sqlsrv_statement_cancel.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sqlsrv/sqlsrv_statement_cancel.phpt b/test/sqlsrv/sqlsrv_statement_cancel.phpt index c010a6b5..45a325d0 100644 --- a/test/sqlsrv/sqlsrv_statement_cancel.phpt +++ b/test/sqlsrv/sqlsrv_statement_cancel.phpt @@ -94,7 +94,7 @@ Repro(); --EXPECTREGEX--  Test begins... -\[Microsoft\](\[ODBC Driver 13 for SQL Server\]|\[ODBC Driver Manager\])([ ]{0,1}Function sequence error) +(.*\[Driver Manager\]|\[Microsoft\](\[ODBC Driver 13 for SQL Server\]|\[ODBC Driver Manager\]))([ ]{0,1}Function sequence error) 0 (HY010) From 237ca11e2fec55dfbcd5f304ec2d6d5958157739 Mon Sep 17 00:00:00 2001 From: yitam Date: Fri, 16 Jun 2017 09:38:07 -0700 Subject: [PATCH 11/11] corrected the expected output --- test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt b/test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt index 69b53eae..382c58d6 100644 --- a/test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt +++ b/test/bvt/sqlsrv/msdn_sqlsrv_cancel.phpt @@ -46,4 +46,4 @@ echo "$count sales accounted for the first $$salesTotal in revenue.\n"; sqlsrv_cancel( $stmt); ?> --EXPECT-- -58 sales accounted for the first $104205.9607 in revenue. \ No newline at end of file +57 sales accounted for the first $104171.7607 in revenue.