@ -22,6 +22,16 @@ int main(int, char**) {
plan ( 3 ) ;
diag ( " === MySQL query_processor_first_comment_parsing Test === " ) ;
diag ( " This test verifies the mysql-query_processor_first_comment_parsing variable " ) ;
diag ( " which controls when comment hints (like /*+ hostgroup=N */) are parsed: " ) ;
diag ( " - Mode 1: Parse comments BEFORE query rules are applied " ) ;
diag ( " - Mode 2: Parse comments AFTER query rules are applied (default) " ) ;
diag ( " - Mode 3: Parse comments both BEFORE and AFTER rules " ) ;
diag ( " The test uses a query rule that strips comments, then verifies that " ) ;
diag ( " the hostgroup hint is still correctly parsed when using mode 1 or 3. " ) ;
diag ( " ======================================================= " ) ;
MYSQL * admin = init_mysql_conn ( cl . host , cl . admin_port , cl . admin_username , cl . admin_password ) ;
if ( ! admin ) {
return exit_status ( ) ;
@ -99,52 +109,78 @@ int main(int, char**) {
}
diag ( " ========== Test 2: New behavior (parsed before rules) ========== " ) ;
// TODO: This test currently fails - mysql-query_processor_first_comment_parsing=1
// should parse comments BEFORE rules are applied, but the feature appears
// to not be working correctly. Skipping until the issue is resolved.
skip ( 1 , " mysql-query_processor_first_comment_parsing=1 feature not working correctly " ) ;
/*
const char * q_set_var2 = " SET mysql-query_processor_first_comment_parsing = 1 " ;
diag ( " Running on Admin: %s " , q_set_var2 ) ;
MYSQL_QUERY_T ( admin , q_set_var2 ) ;
diag ( " Running on Admin: %s " , q_load_vars ) ;
MYSQL_QUERY_T ( admin , q_load_vars ) ;
diag ( " Running on Admin: %s " , q_truncate ) ;
MYSQL_QUERY_T ( admin , q_truncate ) ;
diag ( " Running on Proxy: %s " , query ) ;
MYSQL_QUERY_T ( proxy , query ) ;
proxy_res = mysql_store_result ( proxy ) ;
if ( proxy_res ) mysql_free_result ( proxy_res ) ;
diag ( " Running on Admin: %s " , q_stats ) ;
if ( mysql_query_t ( admin , q_stats ) ) {
fprintf ( stderr , " File %s, line %d, Error: %s \n " , __FILE__ , __LINE__ , mysql_error ( admin ) ) ;
return exit_status ( ) ;
}
res = mysql_store_result ( admin ) ;
if ( res ) {
MYSQL_ROW row = mysql_fetch_row ( res ) ;
if ( row ) {
int hg = atoi ( row [ 0 ] ) ;
ok ( hg = = 1000 , " Comment SHOULD have been parsed BEFORE it was stripped by rule. hg=%d " , hg ) ;
{
const char * q_set_var2 = " SET mysql-query_processor_first_comment_parsing = 1 " ;
diag ( " Running on Admin: %s " , q_set_var2 ) ;
MYSQL_QUERY_T ( admin , q_set_var2 ) ;
diag ( " Running on Admin: %s " , q_load_vars ) ;
MYSQL_QUERY_T ( admin , q_load_vars ) ;
diag ( " Running on Admin: %s " , q_truncate ) ;
MYSQL_QUERY_T ( admin , q_truncate ) ;
diag ( " Running on Proxy: %s " , query ) ;
MYSQL_QUERY_T ( proxy , query ) ;
proxy_res = mysql_store_result ( proxy ) ;
if ( proxy_res ) mysql_free_result ( proxy_res ) ;
diag ( " Running on Admin: %s " , q_stats ) ;
if ( mysql_query_t ( admin , q_stats ) ) {
fprintf ( stderr , " File %s, line %d, Error: %s \n " , __FILE__ , __LINE__ , mysql_error ( admin ) ) ;
return exit_status ( ) ;
}
res = mysql_store_result ( admin ) ;
if ( res ) {
MYSQL_ROW row = mysql_fetch_row ( res ) ;
if ( row ) {
int hg = atoi ( row [ 0 ] ) ;
ok ( hg = = 1000 , " Comment SHOULD have been parsed BEFORE it was stripped by rule. hg=%d " , hg ) ;
} else {
ok ( 0 , " Failed to find query in stats (Test 2) " ) ;
}
mysql_free_result ( res ) ;
} else {
ok ( 0 , " Failed to find query in stats (Test 2)" ) ;
ok ( 0 , " mysql_store_result returned NULL (Test 2)" ) ;
}
mysql_free_result ( res ) ;
} else {
ok ( 0 , " mysql_store_result returned NULL (Test 2) " ) ;
}
*/
diag ( " ========== Test 3: Both passes (mode 3) ========== " ) ;
// TODO: This test currently fails - mysql-query_processor_first_comment_parsing=3
// should parse comments in both passes (before and after rules), but the feature
// appears to not be working correctly. Skipping until the issue is resolved.
skip ( 1 , " mysql-query_processor_first_comment_parsing=3 feature not working correctly " ) ;
{
const char * q_set_var3 = " SET mysql-query_processor_first_comment_parsing = 3 " ;
diag ( " Running on Admin: %s " , q_set_var3 ) ;
MYSQL_QUERY_T ( admin , q_set_var3 ) ;
diag ( " Running on Admin: %s " , q_load_vars ) ;
MYSQL_QUERY_T ( admin , q_load_vars ) ;
diag ( " Running on Admin: %s " , q_truncate ) ;
MYSQL_QUERY_T ( admin , q_truncate ) ;
diag ( " Running on Proxy: %s " , query ) ;
MYSQL_QUERY_T ( proxy , query ) ;
proxy_res = mysql_store_result ( proxy ) ;
if ( proxy_res ) mysql_free_result ( proxy_res ) ;
diag ( " Running on Admin: %s " , q_stats ) ;
if ( mysql_query_t ( admin , q_stats ) ) {
fprintf ( stderr , " File %s, line %d, Error: %s \n " , __FILE__ , __LINE__ , mysql_error ( admin ) ) ;
return exit_status ( ) ;
}
res = mysql_store_result ( admin ) ;
if ( res ) {
MYSQL_ROW row = mysql_fetch_row ( res ) ;
if ( row ) {
int hg = atoi ( row [ 0 ] ) ;
ok ( hg = = 1000 , " Comment SHOULD have been parsed (mode 3 parses before rules). hg=%d " , hg ) ;
} else {
ok ( 0 , " Failed to find query in stats (Test 3) " ) ;
}
mysql_free_result ( res ) ;
} else {
ok ( 0 , " mysql_store_result returned NULL (Test 3) " ) ;
}
}
// Teardown: restore defaults
diag ( " Teardown: restoring defaults " ) ;