################################################################################ # # Stores results from a given query in a temporary table. # # This table can then be used later in the same session for comparing results in # various stages of a transaction (see check_repeatable_read.inc). # # The table name will be: tmp$query_count # where $query_count is the value of the counter for the number of stored # queries in this session. Example: "tmp1" # # We increment the counter (session scope) for the number of queries so that # checker scripts may # a) know how many queries to compare # b) determine the name of the temp tables storing each query # # Assumptions: # - we may be in the middle of a transaction with autocommit OFF. # - queries include all columns of table (t1). This is because we want to # successfully add indexes to columns such as `pk`, `int1_key`, etc. # # Requires the following variables to be set: # $query - the query to be run, which results will be stored in a temp table. # # Modifies the following variables: # $query_count - the number of queries processed by this script so far in this # session. # $tmptable - helper variable containing the name of the temp table. # # The pattern is "CREATE TEMPORARY TABLE tmpx SELECT ...". This allows us to # store query results by using SQL without causing implicit commits. # ################################################################################ # increment the query counter --inc $query_count let $tmptable= tmp$query_count; # Execute the query and store results in a new temp table. # Creating indexes now because we cannot do that later withut causing implicit commit. # Therefore we assume that columns of these names exist in the result set produced by the queries. --echo *** Disabling query log (we may deadlock and not do this after all) --disable_query_log # Also disable warnings, because we get 'Unsafe to binlog' warnings for this with 'newer' server versions. --disable_warnings --echo *** Creating temp table with results from query '$query' unless we deadlock or time out. --error 0, ER_LOCK_DEADLOCK, ER_LOCK_WAIT_TIMEOUT --eval CREATE TEMPORARY TABLE $tmptable (PRIMARY KEY (`pk`), KEY (`int1_key`), KEY (`int2_key`), UNIQUE (`int1_unique`), UNIQUE (`int2_unique`)) $query --enable_warnings # We may not have been able to create temp table due to locking constraints. # In that case, roll back the statement and skip the rest of the test. --source suite/stress_tx_rr/include/check_for_error_rollback_skip.inc --echo *** Enabling query log --enable_query_log