Hello community, here is the log from the commit of package MyODBC-unixODBC for openSUSE:Factory checked in at 2015-05-15 10:06:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/MyODBC-unixODBC (Old) and /work/SRC/openSUSE:Factory/.MyODBC-unixODBC.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "MyODBC-unixODBC" Changes: -------- --- /work/SRC/openSUSE:Factory/MyODBC-unixODBC/MyODBC-unixODBC.changes 2015-02-27 11:10:23.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.MyODBC-unixODBC.new/MyODBC-unixODBC.changes 2015-05-15 10:06:08.000000000 +0200 @@ -1,0 +2,17 @@ +Wed May 13 02:55:46 UTC 2015 - km...@suse.com + +- test() macro is undefined in libmyodbc5.so and is also not found + in libmysqlclient. Port changes found in v5.2 and beyond to prevent: + + isql: symbol lookup error: /usr/lib64/libmyodbc5.so: undefined + + * added: MyODBC-unixODBC-remove_use_of_test_macro.patch + +------------------------------------------------------------------- +Mon May 11 21:55:45 UTC 2015 - km...@suse.com + +- Backport fix from v5.2.3 related to incorrect implementation of + is_minimum_version(). + * added MyODBC-unixODBC-is_minimum_version.patch + +------------------------------------------------------------------- New: ---- MyODBC-unixODBC-is_minimum_version.patch MyODBC-unixODBC-remove_use_of_test_macro.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ MyODBC-unixODBC.spec ++++++ --- /var/tmp/diff_new_pack.67BJIb/_old 2015-05-15 10:06:09.000000000 +0200 +++ /var/tmp/diff_new_pack.67BJIb/_new 2015-05-15 10:06:09.000000000 +0200 @@ -33,6 +33,8 @@ Patch3: MyODBC-unixODBC-64bit.patch Patch4: MyODBC-unixODBC-my_init_dynamic_array_flags.patch Patch5: MyODBC-unixODBC-my_malloc_when_using_my_free.patch +Patch6: MyODBC-unixODBC-is_minimum_version.patch +Patch7: MyODBC-unixODBC-remove_use_of_test_macro.patch BuildRequires: libtool BuildRequires: mysql-devel BuildRequires: unixODBC-devel @@ -54,6 +56,8 @@ %patch4 fi %patch5 -p1 +%patch6 -p1 +%patch7 -p1 %build # mysql 5.5.10 has stopped #define'ing THREAD in its exports, and has ++++++ MyODBC-unixODBC-is_minimum_version.patch ++++++ Index: mysql-connector-odbc-5.1.8/driver/catalog.c =================================================================== --- mysql-connector-odbc-5.1.8.orig/driver/catalog.c +++ mysql-connector-odbc-5.1.8/driver/catalog.c @@ -42,7 +42,7 @@ my_bool server_has_i_s(DBC FAR *dbc) According to the server ChangeLog INFORMATION_SCHEMA was introduced in the 5.0.2 */ - return is_minimum_version(dbc->mysql.server_version, "5.0.2", 5); + return is_minimum_version(dbc->mysql.server_version, "5.0.2"); } /* @type : internal @@ -861,7 +861,7 @@ SQLRETURN i_s_foreign_keys(SQLHSTMT hstm /* With 5.1, we can use REFERENTIAL_CONSTRAINTS to get even more info. */ - if (is_minimum_version(stmt->dbc->mysql.server_version, "5.1", 3)) + if (is_minimum_version(stmt->dbc->mysql.server_version, "5.1")) { update_rule= "CASE" " WHEN R.UPDATE_RULE = 'CASCADE' THEN 0" Index: mysql-connector-odbc-5.1.8/driver/connect.c =================================================================== --- mysql-connector-odbc-5.1.8.orig/driver/connect.c +++ mysql-connector-odbc-5.1.8/driver/connect.c @@ -243,7 +243,7 @@ SQLRETURN myodbc_do_connect(DBC *dbc, Da return SQL_ERROR; } - if (!is_minimum_version(dbc->mysql.server_version, "4.1.1", 5)) + if (!is_minimum_version(dbc->mysql.server_version, "4.1.1")) { mysql_close(mysql); set_dbc_error(dbc, "08001", "Driver does not support server versions under 4.1.1", 0); Index: mysql-connector-odbc-5.1.8/driver/execute.c =================================================================== --- mysql-connector-odbc-5.1.8.orig/driver/execute.c +++ mysql-connector-odbc-5.1.8/driver/execute.c @@ -378,7 +378,7 @@ SQLRETURN insert_param(STMT *stmt, char /* TODO need to check if it was merged to other versions already */ if (has_utf8_maxlen4 && - !is_minimum_version(dbc->mysql.server_version, "6.0.4", 5)) + !is_minimum_version(dbc->mysql.server_version, "6.0.4")) return set_stmt_error(stmt, "HY000", "Server does not support 4-byte encoded " "UTF8 characters.", 0); Index: mysql-connector-odbc-5.1.8/driver/info.c =================================================================== --- mysql-connector-odbc-5.1.8.orig/driver/info.c +++ mysql-connector-odbc-5.1.8/driver/info.c @@ -190,7 +190,7 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT case SQL_CREATE_VIEW: /** @todo SQL_CV_LOCAL ? */ - if (is_minimum_version(dbc->mysql.server_version, "5.0", 3)) + if (is_minimum_version(dbc->mysql.server_version, "5.0")) MYINFO_SET_ULONG(SQL_CV_CREATE_VIEW | SQL_CV_CHECK_OPTION | SQL_CV_CASCADED); else @@ -268,7 +268,7 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT MYINFO_SET_ULONG(SQL_DT_DROP_TABLE | SQL_DT_CASCADE | SQL_DT_RESTRICT); case SQL_DROP_VIEW: - if (is_minimum_version(dbc->mysql.server_version, "5.0", 3)) + if (is_minimum_version(dbc->mysql.server_version, "5.0")) MYINFO_SET_ULONG(SQL_DV_DROP_VIEW | SQL_DV_CASCADE | SQL_DV_RESTRICT); else MYINFO_SET_ULONG(0); @@ -338,7 +338,7 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT We have INFORMATION_SCHEMA.SCHEMATA, but we don't report it because the driver exposes databases (schema) as catalogs. */ - if (is_minimum_version(dbc->mysql.server_version, "5.1", 3)) + if (is_minimum_version(dbc->mysql.server_version, "5.1")) MYINFO_SET_ULONG(SQL_ISV_CHARACTER_SETS | SQL_ISV_COLLATIONS | SQL_ISV_COLUMN_PRIVILEGES | SQL_ISV_COLUMNS | SQL_ISV_KEY_COLUMN_USAGE | @@ -346,7 +346,7 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT /* SQL_ISV_SCHEMATA | */ SQL_ISV_TABLE_CONSTRAINTS | SQL_ISV_TABLE_PRIVILEGES | SQL_ISV_TABLES | SQL_ISV_VIEWS); - else if (is_minimum_version(dbc->mysql.server_version, "5.0", 3)) + else if (is_minimum_version(dbc->mysql.server_version, "5.0")) MYINFO_SET_ULONG(SQL_ISV_CHARACTER_SETS | SQL_ISV_COLLATIONS | SQL_ISV_COLUMN_PRIVILEGES | SQL_ISV_COLUMNS | SQL_ISV_KEY_COLUMN_USAGE | /* SQL_ISV_SCHEMATA | */ @@ -372,7 +372,7 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT the MySQL Reference Manual (which is, in turn, generated from the source) with the pre-reserved ODBC keywords removed. */ - if (is_minimum_version(dbc->mysql.server_version, "5.1", 3)) + if (is_minimum_version(dbc->mysql.server_version, "5.1")) MYINFO_SET_STR("ACCESSIBLE,ANALYZE,ASENSITIVE,BEFORE,BIGINT,BINARY,BLOB," "CALL,CHANGE,CONDITION,DATABASE,DATABASES,DAY_HOUR," "DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DELAYED," @@ -394,7 +394,7 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT "TINYTEXT,TRIGGER,UNDO,UNLOCK,UNSIGNED,USE,UTC_DATE," "UTC_TIME,UTC_TIMESTAMP,VARBINARY,VARCHARACTER,WHILE,X509," "XOR,YEAR_MONTH,ZEROFILL"); - else if (is_minimum_version(dbc->mysql.server_version, "5.0", 3)) + else if (is_minimum_version(dbc->mysql.server_version, "5.0")) MYINFO_SET_STR("ANALYZE,ASENSITIVE,BEFORE,BIGINT,BINARY,BLOB,CALL,CHANGE," "CONDITION,DATABASE,DATABASES,DAY_HOUR,DAY_MICROSECOND," "DAY_MINUTE,DAY_SECOND,DELAYED,DETERMINISTIC,DISTINCTROW," @@ -479,7 +479,7 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT MYINFO_SET_USHORT(NAME_LEN); case SQL_MAX_INDEX_SIZE: - if (is_minimum_version(dbc->mysql.server_version, "5.0", 3)) + if (is_minimum_version(dbc->mysql.server_version, "5.0")) MYINFO_SET_USHORT(3072); else MYINFO_SET_USHORT(1024); @@ -503,7 +503,7 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT MYINFO_SET_USHORT(NAME_LEN); case SQL_MAX_TABLES_IN_SELECT: - if (is_minimum_version(dbc->mysql.server_version, "5.0", 3)) + if (is_minimum_version(dbc->mysql.server_version, "5.0")) MYINFO_SET_USHORT(63); else MYINFO_SET_USHORT(31); @@ -561,13 +561,13 @@ MySQLGetInfo(SQLHDBC hdbc, SQLUSMALLINT MYINFO_SET_ULONG(SQL_PAS_NO_BATCH); case SQL_PROCEDURE_TERM: - if (is_minimum_version(dbc->mysql.server_version, "5.0", 3)) + if (is_minimum_version(dbc->mysql.server_version, "5.0")) MYINFO_SET_STR("stored procedure"); else MYINFO_SET_STR(""); case SQL_PROCEDURES: - if (is_minimum_version(dbc->mysql.server_version, "5.0", 3)) + if (is_minimum_version(dbc->mysql.server_version, "5.0")) MYINFO_SET_STR("Y"); else MYINFO_SET_STR("N"); Index: mysql-connector-odbc-5.1.8/driver/myutil.h =================================================================== --- mysql-connector-odbc-5.1.8.orig/driver/myutil.h +++ mysql-connector-odbc-5.1.8/driver/myutil.h @@ -255,8 +255,7 @@ char *extend_buffer(NET *net,char *to,ul void myodbc_end(); my_bool set_dynamic_result(STMT FAR *stmt); void set_current_cursor_data(STMT FAR *stmt,SQLUINTEGER irow); -my_bool is_minimum_version(const char *server_version,const char *version, - uint length); +my_bool is_minimum_version(const char *server_version,const char *version); int myodbc_strcasecmp(const char *s, const char *t); int myodbc_casecmp(const char *s, const char *t, uint len); my_bool reget_current_catalog(DBC FAR *dbc); Index: mysql-connector-odbc-5.1.8/driver/utility.c =================================================================== --- mysql-connector-odbc-5.1.8.orig/driver/utility.c +++ mysql-connector-odbc-5.1.8/driver/utility.c @@ -2263,11 +2263,23 @@ void end_query_log(FILE *query_log) } -my_bool is_minimum_version(const char *server_version,const char *version, - uint length) +my_bool is_minimum_version(const char *server_version,const char *version) { - if ( strncmp(server_version,version,length) >= 0 ) + /* + Variables have to be initialized if we don't want to get random + values after sscanf + */ + uint major1= 0, major2= 0, minor1= 0, minor2= 0, build1= 0, build2= 0; + + sscanf(server_version, "%u.%u.%u", &major1, &minor1, &build1); + sscanf(version, "%u.%u.%u", &major2, &minor2, &build2); + + if ( major1 > major2 || + major1 == major2 && (minor1 > minor2 || + minor1 == minor2 && build1 >= build2)) + { return TRUE; + } return FALSE; } ++++++ MyODBC-unixODBC-remove_use_of_test_macro.patch ++++++ Index: mysql-connector-odbc-5.1.8/driver/utility.c =================================================================== --- mysql-connector-odbc-5.1.8.orig/driver/utility.c +++ mysql-connector-odbc-5.1.8/driver/utility.c @@ -981,8 +981,8 @@ SQLRETURN copy_binhex_result(STMT *stmt, */ SQLSMALLINT get_sql_data_type(STMT *stmt, MYSQL_FIELD *field, char *buff) { - my_bool field_is_binary= test(field->charsetnr == BINARY_CHARSET_NUMBER) && - (test(field->org_table_length > 0) || + my_bool field_is_binary= (field->charsetnr == BINARY_CHARSET_NUMBER ? 1 : 0) && + ((field->org_table_length > 0 ? 1 : 0) || !stmt->dbc->ds->handle_binary_as_char); switch (field->type) { @@ -1324,8 +1324,8 @@ SQLULEN get_column_size(STMT *stmt, MYSQ case MYSQL_TYPE_DECIMAL: case MYSQL_TYPE_NEWDECIMAL: return (length - - test(!(field->flags & UNSIGNED_FLAG)) - /* sign? */ - test(field->decimals)); /* decimal point? */ + (!(field->flags & UNSIGNED_FLAG) ? 1 : 0) - /* sign? */ + (field->decimals ? 1 : 0)); /* decimal point? */ case MYSQL_TYPE_BIT: /* @@ -1521,16 +1521,16 @@ SQLLEN get_display_size(STMT *stmt __att switch (field->type) { case MYSQL_TYPE_TINY: - return 3 + test(field->flags & UNSIGNED_FLAG); + return 3 + (field->flags & UNSIGNED_FLAG ? 1 : 0); case MYSQL_TYPE_SHORT: - return 5 + test(field->flags & UNSIGNED_FLAG); + return 5 + (field->flags & UNSIGNED_FLAG ? 1 : 0); case MYSQL_TYPE_INT24: - return 8 + test(field->flags & UNSIGNED_FLAG); + return 8 + (field->flags & UNSIGNED_FLAG ? 1 : 0); case MYSQL_TYPE_LONG: - return 10 + test(field->flags & UNSIGNED_FLAG); + return 10 + (field->flags & UNSIGNED_FLAG ? 1 : 0); case MYSQL_TYPE_FLOAT: return 14;