Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into 10.2-server
Browse files Browse the repository at this point in the history
  • Loading branch information
9EOR9 committed Jun 14, 2017
2 parents e5ce85b + ff4bfdf commit 6f113bb
Show file tree
Hide file tree
Showing 13 changed files with 521 additions and 102 deletions.
1 change: 1 addition & 0 deletions include/errmsg.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,5 +95,6 @@ extern const char *mariadb_client_errors[]; /* Error messages */
#define CR_FUNCTION_NOT_SUPPORTED 5003
#define CR_FILE_NOT_FOUND 5004
#define CR_FILE_READ 5005
#define CR_BULK_WITHOUT_PARAMETERS 5006

#endif
2 changes: 2 additions & 0 deletions include/ma_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ struct st_mysql_options_extension {
my_bool (*set_option)(MYSQL *mysql, const char *config_option, const char *config_value);
HASH userdata;
char *server_public_key;
char *proxy_header;
size_t proxy_header_len;
};

typedef struct st_connection_handler
Expand Down
3 changes: 2 additions & 1 deletion include/mariadb_com.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ enum enum_server_command
COM_DAEMON= 29,
COM_UNSUPPORTED= 30,
COM_RESET_CONNECTION = 31,
COM_STMT_BULK_EXECUTE = 250,
COM_MULTI = 254,
COM_END
};
Expand Down Expand Up @@ -135,7 +136,7 @@ enum enum_server_command
#define REFRESH_READ_LOCK 16384 /* Lock tables for read */
#define REFRESH_FAST 32768 /* Intern flag */

#define CLIENT_MYSQL 1
#define CLIENT_MYSQL 1
#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
#define CLIENT_LONG_FLAG 4 /* Get all column flags */
#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
Expand Down
12 changes: 9 additions & 3 deletions include/mariadb_stmt.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@
#define MADB_BIND_DUMMY 1

#define MARIADB_STMT_BULK_SUPPORTED(stmt)\
((stmt)->array_size > 0 && \
(stmt)->mysql && \
((stmt)->mysql && \
(!((stmt)->mysql->server_capabilities & CLIENT_MYSQL) &&\
((stmt)->mysql->extension->mariadb_server_capabilities & MARIADB_CLIENT_STMT_BULK_OPERATIONS >> 32)))
((stmt)->mysql->extension->mariadb_server_capabilities & \
(MARIADB_CLIENT_STMT_BULK_OPERATIONS >> 32))))

#define SET_CLIENT_STMT_ERROR(a, b, c, d) \
{ \
Expand Down Expand Up @@ -84,6 +84,12 @@ enum enum_indicator_type
STMT_INDICATOR_IGNORE=3
};

/*
bulk PS flags
*/
#define STMT_BULK_FLAG_CLIENT_SEND_TYPES 128
#define STMT_BULK_FLAG_INSERT_ID_REQUEST 64

typedef enum mysql_stmt_state
{
MYSQL_STMT_INITTED = 0,
Expand Down
3 changes: 2 additions & 1 deletion include/mysql.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,8 @@ extern const char *SQLSTATE_UNKNOWN;
MARIADB_OPT_FOUND_ROWS,
MARIADB_OPT_MULTI_RESULTS,
MARIADB_OPT_MULTI_STATEMENTS,
MARIADB_OPT_INTERACTIVE
MARIADB_OPT_INTERACTIVE,
MARIADB_OPT_PROXY_HEADER
};

enum mariadb_value {
Expand Down
18 changes: 12 additions & 6 deletions libmariadb/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ CREATE_EXPORT_FILE(mariadbclient
"${MARIADB_LIB_SYMBOLS}")


IF(CMAKE_VERSION VERSION_GREATER 2.8.7)
IF((NOT WIN32) AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
# CREATE OBJECT LIBRARY
ADD_LIBRARY(mariadb_obj OBJECT ${LIBMARIADB_SOURCES})
IF(UNIX)
Expand All @@ -346,8 +346,8 @@ ENDIF()
# Xcode doesn't support targets that have only object files,
# so let's add an empty file to keep Xcode happy
IF(CMAKE_GENERATOR MATCHES Xcode)
FILE(WRITE ${CC_SOURCE_DIR}/libmariadb/empty.c "")
SET(EMPTY_FILE ${CC_SOURCE_DIR}/libmariadb/empty.c)
FILE(WRITE ${CC_BINARY_DIR}/libmariadb/empty.c "")
SET(EMPTY_FILE ${CC_BINARY_DIR}/libmariadb/empty.c)
ENDIF()

IF(WIN32)
Expand All @@ -358,14 +358,20 @@ IF(WIN32)
"FILE_DESCRIPTION:Dynamic lib for client/server communication")
ENDIF()

ADD_LIBRARY(mariadbclient STATIC ${mariadbclient_RC} ${MARIADB_OBJECTS} ${EMPTY_FILE} mariadbclient.def)
ADD_LIBRARY(mariadbclient STATIC ${MARIADB_OBJECTS} ${EMPTY_FILE})
TARGET_LINK_LIBRARIES(mariadbclient ${SYSTEM_LIBS})
ADD_LIBRARY(libmariadb SHARED ${libmariadb_RC} ${MARIADB_OBJECTS} ${EMPTY_FILE} mariadbclient.def)
TARGET_LINK_LIBRARIES(libmariadb ${SYSTEM_LIBS})

IF(UNIX)
ADD_LIBRARY(libmariadb SHARED ${libmariadb_RC} ${MARIADB_OBJECTS} ${EMPTY_FILE} mariadbclient.def)
SET_TARGET_PROPERTIES(libmariadb PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
ELSE()
ADD_LIBRARY(libmariadb SHARED ${libmariadb_RC} mariadbclient.def)
TARGET_LINK_LIBRARIES(libmariadb mariadbclient)
SET_TARGET_PROPERTIES(libmariadb PROPERTIES LINKER_LANGUAGE C)
ENDIF()

TARGET_LINK_LIBRARIES(libmariadb ${SYSTEM_LIBS})

SIGN_TARGET(libmariadb)

IF(CMAKE_SIZEOF_VOID_P EQUAL 8 AND MSVC)
Expand Down
1 change: 1 addition & 0 deletions libmariadb/ma_errmsg.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ const char *mariadb_client_errors[] =
/* 5003 */ "Server doesn't support function '%s'",
/* 5004 */ "File '%s' not found (Errcode: %d)",
/* 5005 */ "Error reading file '%s' (Errcode: %d)",
/* 5006 */ "Bulk operation without parameters is not supported",
""
};

Expand Down
27 changes: 24 additions & 3 deletions libmariadb/mariadb_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ ma_net_safe_read(MYSQL *mysql)

if (last_errno== 65535 &&
((mariadb_connection(mysql) && (mysql->server_capabilities & CLIENT_PROGRESS)) ||
(!(mysql->extension->mariadb_server_capabilities & MARIADB_CLIENT_PROGRESS >> 32))))
(!(mysql->extension->mariadb_server_capabilities & MARIADB_CLIENT_PROGRESS << 32))))
{
if (cli_report_progress(mysql, (uchar *)pos, (uint) (len-1)))
{
Expand Down Expand Up @@ -657,10 +657,12 @@ struct st_default_options mariadb_defaults[] =
else \
(OPTS)->extension->KEY= NULL

#define OPT_SET_EXTENDED_VALUE_INT(OPTS, KEY, VAL) \
#define OPT_SET_EXTENDED_VALUE(OPTS, KEY, VAL) \
CHECK_OPT_EXTENSION_SET(OPTS) \
(OPTS)->extension->KEY= (VAL)

#define OPT_SET_EXTENDED_VALUE_INT(A,B,C) OPT_SET_EXTENDED_VALUE(A,B,C)

#define OPT_SET_VALUE_STR(OPTS, KEY, VAL) \
free((OPTS)->KEY); \
if((VAL)) \
Expand Down Expand Up @@ -1303,6 +1305,17 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
goto error;
}

if (mysql->options.extension && mysql->options.extension->proxy_header)
{
char *hdr = mysql->options.extension->proxy_header;
size_t len = mysql->options.extension->proxy_header_len;
if (ma_pvio_write(pvio, hdr, len) <= 0)
{
ma_pvio_close(pvio);
goto error;
}
}

if (ma_net_init(net, pvio))
goto error;

Expand Down Expand Up @@ -1483,7 +1496,8 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
net->compress= 1;

/* last part: select default db */
if (db && !mysql->db)
if (!(mysql->server_capabilities & CLIENT_CONNECT_WITH_DB) &&
(db && !mysql->db))
{
if (mysql_select_db(mysql, db))
{
Expand Down Expand Up @@ -2955,6 +2969,13 @@ mysql_optionsv(MYSQL *mysql,enum mysql_option option, ...)
case MARIADB_OPT_CONNECTION_READ_ONLY:
OPT_SET_EXTENDED_VALUE_INT(&mysql->options, read_only, *(my_bool *)arg1);
break;
case MARIADB_OPT_PROXY_HEADER:
{
size_t arg2 = va_arg(ap, size_t);
OPT_SET_EXTENDED_VALUE(&mysql->options, proxy_header, (char *)arg1);
OPT_SET_EXTENDED_VALUE(&mysql->options, proxy_header_len, arg2);
}
break;
default:
va_end(ap);
return(-1);
Expand Down
Loading

0 comments on commit 6f113bb

Please sign in to comment.