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;

Reply via email to