Commit 802c09ad authored by marko's avatar marko

branches/zip: Merge revisions 459:465 from trunk.

parent 0c4dfda3
...@@ -75,7 +75,7 @@ dict_create_sys_tables_tuple( ...@@ -75,7 +75,7 @@ dict_create_sys_tables_tuple(
dfield = dtuple_get_nth_field(entry, 3); dfield = dtuple_get_nth_field(entry, 3);
ptr = mem_heap_alloc(heap, 4); ptr = mem_heap_alloc(heap, 4);
mach_write_to_4(ptr, table->type); mach_write_to_4(ptr, DICT_TABLE_ORDINARY);
dfield_set_data(dfield, ptr, 4); dfield_set_data(dfield, ptr, 4);
/* 6: MIX_ID ---------------------------*/ /* 6: MIX_ID ---------------------------*/
...@@ -1256,7 +1256,7 @@ dict_create_or_check_foreign_constraint_tables(void) ...@@ -1256,7 +1256,7 @@ dict_create_or_check_foreign_constraint_tables(void)
} }
/******************************************************************** /********************************************************************
Evaluate the given SQL statement. */ Evaluate the given foreign key SQL statement. */
ulint ulint
dict_foreign_eval_sql( dict_foreign_eval_sql(
...@@ -1268,26 +1268,10 @@ dict_foreign_eval_sql( ...@@ -1268,26 +1268,10 @@ dict_foreign_eval_sql(
dict_foreign_t* foreign,/* in: foreign */ dict_foreign_t* foreign,/* in: foreign */
trx_t* trx) /* in: transaction */ trx_t* trx) /* in: transaction */
{ {
que_thr_t* thr;
que_t* graph;
ulint error; ulint error;
FILE* ef = dict_foreign_err_file; FILE* ef = dict_foreign_err_file;
graph = pars_sql(info, sql); error = que_eval_sql(info, sql, trx);
ut_a(graph);
graph->trx = trx;
trx->graph = NULL;
graph->fork_type = QUE_FORK_MYSQL_INTERFACE;
ut_a(thr = que_fork_start_command(graph));
que_run_threads(thr);
error = trx->error_state;
que_graph_free(graph);
if (error == DB_DUPLICATE_KEY) { if (error == DB_DUPLICATE_KEY) {
mutex_enter(&dict_foreign_err_mutex); mutex_enter(&dict_foreign_err_mutex);
......
...@@ -1716,8 +1716,6 @@ dict_table_copy_types( ...@@ -1716,8 +1716,6 @@ dict_table_copy_types(
dtype_t* type; dtype_t* type;
ulint i; ulint i;
ut_ad(!(table->type & DICT_UNIVERSAL));
for (i = 0; i < dtuple_get_n_fields(tuple); i++) { for (i = 0; i < dtuple_get_n_fields(tuple); i++) {
dfield_type = dfield_get_type(dtuple_get_nth_field(tuple, i)); dfield_type = dfield_get_type(dtuple_get_nth_field(tuple, i));
...@@ -1766,8 +1764,6 @@ dict_index_build_internal_clust( ...@@ -1766,8 +1764,6 @@ dict_index_build_internal_clust(
new_index->id = index->id; new_index->id = index->id;
ut_a(table->type == DICT_TABLE_ORDINARY);
/* Copy the fields of index */ /* Copy the fields of index */
dict_index_copy(new_index, index, 0, index->n_fields); dict_index_copy(new_index, index, 0, index->n_fields);
......
...@@ -768,7 +768,7 @@ dict_load_table( ...@@ -768,7 +768,7 @@ dict_load_table(
if (!btr_pcur_is_on_user_rec(&pcur, &mtr) if (!btr_pcur_is_on_user_rec(&pcur, &mtr)
|| rec_get_deleted_flag(rec, 0)) { || rec_get_deleted_flag(rec, 0)) {
/* Not found */ /* Not found */
err_exit:
btr_pcur_close(&pcur); btr_pcur_close(&pcur);
mtr_commit(&mtr); mtr_commit(&mtr);
mem_heap_free(heap); mem_heap_free(heap);
...@@ -780,11 +780,8 @@ dict_load_table( ...@@ -780,11 +780,8 @@ dict_load_table(
/* Check if the table name in record is the searched one */ /* Check if the table name in record is the searched one */
if (len != ut_strlen(name) || ut_memcmp(name, field, len) != 0) { if (len != ut_strlen(name) || ut_memcmp(name, field, len) != 0) {
btr_pcur_close(&pcur);
mtr_commit(&mtr);
mem_heap_free(heap);
return(NULL); goto err_exit;
} }
ut_a(0 == ut_strcmp("SPACE", ut_a(0 == ut_strcmp("SPACE",
...@@ -848,8 +845,13 @@ dict_load_table( ...@@ -848,8 +845,13 @@ dict_load_table(
table->id = mach_read_from_8(field); table->id = mach_read_from_8(field);
field = rec_get_nth_field_old(rec, 5, &len); field = rec_get_nth_field_old(rec, 5, &len);
table->type = mach_read_from_4(field); if (UNIV_UNLIKELY(mach_read_from_4(field) != DICT_TABLE_ORDINARY)) {
ut_a(table->type == DICT_TABLE_ORDINARY); ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: table %s: unknown table type %lu\n",
name, (ulong) mach_read_from_4(field));
goto err_exit;
}
btr_pcur_close(&pcur); btr_pcur_close(&pcur);
mtr_commit(&mtr); mtr_commit(&mtr);
......
...@@ -50,7 +50,6 @@ dict_mem_table_create( ...@@ -50,7 +50,6 @@ dict_mem_table_create(
table->heap = heap; table->heap = heap;
table->type = DICT_TABLE_ORDINARY;
table->flags = flags; table->flags = flags;
table->name = mem_heap_strdup(heap, name); table->name = mem_heap_strdup(heap, name);
table->dir_path_of_temp_table = NULL; table->dir_path_of_temp_table = NULL;
......
...@@ -946,7 +946,6 @@ dict_tables_have_same_db( ...@@ -946,7 +946,6 @@ dict_tables_have_same_db(
dbname '/' tablename */ dbname '/' tablename */
const char* name2); /* in: table name in the form const char* name2); /* in: table name in the form
dbname '/' tablename */ dbname '/' tablename */
/************************************************************************* /*************************************************************************
Scans from pointer onwards. Stops if is at the start of a copy of Scans from pointer onwards. Stops if is at the start of a copy of
'string' where characters are compared without case sensitivity. Stops 'string' where characters are compared without case sensitivity. Stops
...@@ -958,7 +957,6 @@ dict_scan_to( ...@@ -958,7 +957,6 @@ dict_scan_to(
/* out: scanned up to this */ /* out: scanned up to this */
const char* ptr, /* in: scan from */ const char* ptr, /* in: scan from */
const char* string);/* in: look for this */ const char* string);/* in: look for this */
/* Buffers for storing detailed information about the latest foreign key /* Buffers for storing detailed information about the latest foreign key
and unique key errors */ and unique key errors */
extern FILE* dict_foreign_err_file; extern FILE* dict_foreign_err_file;
......
...@@ -282,7 +282,6 @@ a foreign key constraint is enforced, therefore RESTRICT just means no flag */ ...@@ -282,7 +282,6 @@ a foreign key constraint is enforced, therefore RESTRICT just means no flag */
/* Data structure for a database table */ /* Data structure for a database table */
struct dict_table_struct{ struct dict_table_struct{
dulint id; /* id of the table */ dulint id; /* id of the table */
ulint type; /* DICT_TABLE_ORDINARY, ... */
ulint flags; /* DICT_TF_COMPACT, ... */ ulint flags; /* DICT_TF_COMPACT, ... */
mem_heap_t* heap; /* memory heap */ mem_heap_t* heap; /* memory heap */
const char* name; /* table name */ const char* name; /* table name */
......
...@@ -505,6 +505,22 @@ pars_info_add_int4_literal( ...@@ -505,6 +505,22 @@ pars_info_add_int4_literal(
lint val); /* in: value */ lint val); /* in: value */
/******************************************************************** /********************************************************************
Equivalent to:
char buf[8];
mach_write_to_8(buf, val);
pars_info_add_literal(info, name, buf, 8, DATA_BINARY, 0);
except that the buffer is dynamically allocated from the info struct's
heap. */
void
pars_info_add_dulint_literal(
/*=========================*/
pars_info_t* info, /* in: info struct */
const char* name, /* in: name */
dulint val); /* in: value */
/********************************************************************
Add user function. */ Add user function. */
void void
......
...@@ -331,8 +331,15 @@ void ...@@ -331,8 +331,15 @@ void
que_node_print_info( que_node_print_info(
/*================*/ /*================*/
que_node_t* node); /* in: query graph node */ que_node_t* node); /* in: query graph node */
/*************************************************************************
Evaluate the given SQL */
ulint
que_eval_sql(
/*=========*/
pars_info_t* info, /* out: error code or DB_SUCCESS */
const char* sql, /* in: info struct, or NULL */
trx_t* trx); /* in: trx */
/* Query graph query thread node: the fields are protected by the kernel /* Query graph query thread node: the fields are protected by the kernel
mutex with the exceptions named below */ mutex with the exceptions named below */
......
...@@ -2016,6 +2016,30 @@ pars_info_add_int4_literal( ...@@ -2016,6 +2016,30 @@ pars_info_add_int4_literal(
pars_info_add_literal(info, name, buf, 4, DATA_INT, 0); pars_info_add_literal(info, name, buf, 4, DATA_INT, 0);
} }
/********************************************************************
Equivalent to:
char buf[8];
mach_write_to_8(buf, val);
pars_info_add_literal(info, name, buf, 8, DATA_FIXBINARY, 0);
except that the buffer is dynamically allocated from the info struct's
heap. */
void
pars_info_add_dulint_literal(
/*=========================*/
pars_info_t* info, /* in: info struct */
const char* name, /* in: name */
dulint val) /* in: value */
{
byte* buf = mem_heap_alloc(info->heap, 8);
mach_write_to_8(buf, val);
pars_info_add_literal(info, name, buf, 8, DATA_FIXBINARY, 0);
}
/******************************************************************** /********************************************************************
Add user function. */ Add user function. */
......
...@@ -25,6 +25,7 @@ Created 5/27/1996 Heikki Tuuri ...@@ -25,6 +25,7 @@ Created 5/27/1996 Heikki Tuuri
#include "log0log.h" #include "log0log.h"
#include "eval0proc.h" #include "eval0proc.h"
#include "eval0eval.h" #include "eval0eval.h"
#include "pars0types.h"
#define QUE_PARALLELIZE_LIMIT (64 * 256 * 256 * 256) #define QUE_PARALLELIZE_LIMIT (64 * 256 * 256 * 256)
#define QUE_ROUND_ROBIN_LIMIT (64 * 256 * 256 * 256) #define QUE_ROUND_ROBIN_LIMIT (64 * 256 * 256 * 256)
...@@ -1365,3 +1366,33 @@ que_run_threads( ...@@ -1365,3 +1366,33 @@ que_run_threads(
goto loop; goto loop;
} }
/*************************************************************************
Evaluate the given SQL */
ulint
que_eval_sql(
/*=========*/
pars_info_t* info, /* out: error code or DB_SUCCESS */
const char* sql, /* in: info struct, or NULL */
trx_t* trx) /* in: trx */
{
que_thr_t* thr;
que_t* graph;
graph = pars_sql(info, sql);
ut_a(graph);
graph->trx = trx;
trx->graph = NULL;
graph->fork_type = QUE_FORK_MYSQL_INTERFACE;
ut_a(thr = que_fork_start_command(graph));
que_run_threads(thr);
que_graph_free(graph);
return(trx->error_state);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment