MXS-1275: Extend QC-API to allow setting of sql mode
Only API changes, implementation will follow.
This commit is contained in:
@ -29,6 +29,16 @@ typedef enum qc_init_kind
|
|||||||
QC_INIT_BOTH = 0x03
|
QC_INIT_BOTH = 0x03
|
||||||
} qc_init_kind_t;
|
} qc_init_kind_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qc_sql_mode_t specifies what should be assumed of the statements
|
||||||
|
* that will be parsed.
|
||||||
|
*/
|
||||||
|
typedef enum qc_sql_mode
|
||||||
|
{
|
||||||
|
QC_SQL_MODE_DEFAULT, /*< Assume the statements are MariaDB SQL. */
|
||||||
|
QC_SQL_MODE_ORACLE /*< Assume the statements are PL/SQL. */
|
||||||
|
} qc_sql_mode_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @c qc_collect_info_t specifies what information should be collected during parsing.
|
* @c qc_collect_info_t specifies what information should be collected during parsing.
|
||||||
*/
|
*/
|
||||||
@ -376,6 +386,24 @@ typedef struct query_classifier
|
|||||||
* exhaustion or equivalent.
|
* exhaustion or equivalent.
|
||||||
*/
|
*/
|
||||||
int32_t (*qc_get_preparable_stmt)(GWBUF* stmt, GWBUF** preparable_stmt);
|
int32_t (*qc_get_preparable_stmt)(GWBUF* stmt, GWBUF** preparable_stmt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the sql mode of the *calling* thread.
|
||||||
|
*
|
||||||
|
* @param sql_mode The mode.
|
||||||
|
*
|
||||||
|
* @return QC_RESULT_OK
|
||||||
|
*/
|
||||||
|
int32_t (*qc_get_sql_mode)(qc_sql_mode_t* sql_mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the sql mode for the *calling* thread.
|
||||||
|
*
|
||||||
|
* @param sql_mode The mode.
|
||||||
|
*
|
||||||
|
* @return QC_RESULT_OK if @sql_mode is valid, otherwise QC_RESULT_ERROR.
|
||||||
|
*/
|
||||||
|
int32_t (*qc_set_sql_mode)(qc_sql_mode_t sql_mode);
|
||||||
} QUERY_CLASSIFIER;
|
} QUERY_CLASSIFIER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -641,6 +669,13 @@ char* qc_get_prepare_name(GWBUF* stmt);
|
|||||||
*/
|
*/
|
||||||
GWBUF* qc_get_preparable_stmt(GWBUF* stmt);
|
GWBUF* qc_get_preparable_stmt(GWBUF* stmt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the sql mode of the *calling* thread.
|
||||||
|
*
|
||||||
|
* @return The mode.
|
||||||
|
*/
|
||||||
|
qc_sql_mode_t qc_get_sql_mode();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the tables accessed by the statement.
|
* Returns the tables accessed by the statement.
|
||||||
*
|
*
|
||||||
@ -739,6 +774,13 @@ static inline bool qc_query_is_type(uint32_t typemask, qc_query_type_t type)
|
|||||||
*/
|
*/
|
||||||
bool qc_query_has_clause(GWBUF* stmt);
|
bool qc_query_has_clause(GWBUF* stmt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the sql mode for the *calling* thread.
|
||||||
|
*
|
||||||
|
* @param sql_mode The mode.
|
||||||
|
*/
|
||||||
|
void qc_set_sql_mode(qc_sql_mode_t sql_mode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the string representation of a query type.
|
* Returns the string representation of a query type.
|
||||||
*
|
*
|
||||||
|
@ -115,6 +115,16 @@ int32_t qc_dummy_get_preparable_stmt(GWBUF* stmt, GWBUF** preparable_stmt)
|
|||||||
return QC_RESULT_OK;
|
return QC_RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t qc_dummy_get_sql_mode(qc_sql_mode_t* sql_mode)
|
||||||
|
{
|
||||||
|
return QC_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t qc_dummy_set_sql_mode(qc_sql_mode_t sql_mode)
|
||||||
|
{
|
||||||
|
return QC_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
MXS_MODULE* MXS_CREATE_MODULE()
|
MXS_MODULE* MXS_CREATE_MODULE()
|
||||||
@ -139,6 +149,8 @@ extern "C"
|
|||||||
qc_dummy_get_field_info,
|
qc_dummy_get_field_info,
|
||||||
qc_dummy_get_function_info,
|
qc_dummy_get_function_info,
|
||||||
qc_dummy_get_preparable_stmt,
|
qc_dummy_get_preparable_stmt,
|
||||||
|
qc_dummy_get_sql_mode,
|
||||||
|
qc_dummy_set_sql_mode,
|
||||||
};
|
};
|
||||||
|
|
||||||
static MXS_MODULE info =
|
static MXS_MODULE info =
|
||||||
|
@ -3020,6 +3020,16 @@ void qc_mysql_thread_end(void)
|
|||||||
mysql_thread_end();
|
mysql_thread_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t qc_mysql_get_sql_mode(qc_sql_mode_t* sql_mode)
|
||||||
|
{
|
||||||
|
return QC_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t qc_mysql_set_sql_mode(qc_sql_mode_t sql_mode)
|
||||||
|
{
|
||||||
|
return QC_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPORTS
|
* EXPORTS
|
||||||
*/
|
*/
|
||||||
@ -3049,6 +3059,8 @@ extern "C"
|
|||||||
qc_mysql_get_field_info,
|
qc_mysql_get_field_info,
|
||||||
qc_mysql_get_function_info,
|
qc_mysql_get_function_info,
|
||||||
qc_mysql_get_preparable_stmt,
|
qc_mysql_get_preparable_stmt,
|
||||||
|
qc_mysql_get_sql_mode,
|
||||||
|
qc_mysql_set_sql_mode,
|
||||||
};
|
};
|
||||||
|
|
||||||
static MXS_MODULE info =
|
static MXS_MODULE info =
|
||||||
|
@ -63,12 +63,6 @@ typedef enum qc_parse_as
|
|||||||
QC_PARSE_AS_103 // Parse as embedded lib does in 10.3
|
QC_PARSE_AS_103 // Parse as embedded lib does in 10.3
|
||||||
} qc_parse_as_t;
|
} qc_parse_as_t;
|
||||||
|
|
||||||
typedef enum qc_sql_mode
|
|
||||||
{
|
|
||||||
QC_SQL_MODE_DEFAULT,
|
|
||||||
QC_SQL_MODE_ORACLE
|
|
||||||
} qc_sql_mode_t;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains information about a particular query.
|
* Contains information about a particular query.
|
||||||
*/
|
*/
|
||||||
@ -3971,6 +3965,16 @@ int32_t qc_sqlite_get_preparable_stmt(GWBUF* stmt, GWBUF** preparable_stmt)
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t qc_sqlite_get_sql_mode(qc_sql_mode_t* sql_mode)
|
||||||
|
{
|
||||||
|
return QC_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t qc_sqlite_set_sql_mode(qc_sql_mode_t sql_mode)
|
||||||
|
{
|
||||||
|
return QC_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPORTS
|
* EXPORTS
|
||||||
*/
|
*/
|
||||||
@ -3997,6 +4001,8 @@ MXS_MODULE* MXS_CREATE_MODULE()
|
|||||||
qc_sqlite_get_field_info,
|
qc_sqlite_get_field_info,
|
||||||
qc_sqlite_get_function_info,
|
qc_sqlite_get_function_info,
|
||||||
qc_sqlite_get_preparable_stmt,
|
qc_sqlite_get_preparable_stmt,
|
||||||
|
qc_sqlite_get_sql_mode,
|
||||||
|
qc_sqlite_set_sql_mode,
|
||||||
};
|
};
|
||||||
|
|
||||||
static MXS_MODULE info =
|
static MXS_MODULE info =
|
||||||
|
@ -907,3 +907,25 @@ uint32_t qc_get_trx_type_mask(GWBUF* stmt)
|
|||||||
{
|
{
|
||||||
return qc_get_trx_type_mask_using(stmt, qc_trx_parse_using);
|
return qc_get_trx_type_mask_using(stmt, qc_trx_parse_using);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qc_sql_mode_t qc_get_sql_mode()
|
||||||
|
{
|
||||||
|
QC_TRACE();
|
||||||
|
ss_dassert(classifier);
|
||||||
|
|
||||||
|
qc_sql_mode_t sql_mode;
|
||||||
|
|
||||||
|
ss_debug(int32_t rv =) classifier->qc_get_sql_mode(&sql_mode);
|
||||||
|
ss_dassert(rv == QC_RESULT_OK);
|
||||||
|
|
||||||
|
return sql_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void qc_set_sql_mode(qc_sql_mode_t sql_mode)
|
||||||
|
{
|
||||||
|
QC_TRACE();
|
||||||
|
ss_dassert(classifier);
|
||||||
|
|
||||||
|
ss_debug(int32_t rv =) classifier->qc_set_sql_mode(sql_mode);
|
||||||
|
ss_dassert(rv == QC_RESULT_OK);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user