mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
branches/zip: Merge revisions 1322:1402 from trunk.
This commit is contained in:
parent
3423833053
commit
33c1125d55
35 changed files with 329 additions and 1312 deletions
|
@ -13,8 +13,8 @@
|
|||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
#SET(CMAKE_CXX_FLAGS_DEBUG "-DSAFEMALLOC -DSAFE_MUTEX")
|
||||
#SET(CMAKE_C_FLAGS_DEBUG "-DSAFEMALLOC -DSAFE_MUTEX")
|
||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
||||
ADD_DEFINITIONS(-DMYSQL_SERVER -D_WIN32 -DWIN32 -D_LIB)
|
||||
|
||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib
|
||||
|
|
|
@ -91,6 +91,8 @@ EXTRA_DIST = include/btr0btr.h include/btr0btr.ic include/btr0cur.h include/btr
|
|||
include/ut0sort.h include/ut0ut.h include/ut0ut.ic include/ut0vec.h include/ut0vec.ic include/ha_prototypes.h \
|
||||
include/ut0list.h include/ut0list.ic \
|
||||
include/ut0wqueue.h \
|
||||
pars/make_bison.sh pars/make_flex.sh \
|
||||
pars/pars0grm.y pars/pars0lex.l
|
||||
CMakeLists.txt plug.in
|
||||
|
||||
noinst_LIBRARIES = libinnobase.a
|
||||
|
|
|
@ -261,7 +261,7 @@ dict_build_table_def_step(
|
|||
&space, path_or_name, is_path,
|
||||
dict_table_zip_size(table),
|
||||
FIL_IBD_FILE_INITIAL_SIZE);
|
||||
table->space = space;
|
||||
table->space = (unsigned int) space;
|
||||
|
||||
if (error != DB_SUCCESS) {
|
||||
|
||||
|
@ -820,7 +820,7 @@ create:
|
|||
|
||||
root_page_no = btr_create(type, space, zip_size, index_id, index, mtr);
|
||||
if (index) {
|
||||
index->page = root_page_no;
|
||||
index->page = (unsigned int) root_page_no;
|
||||
} else {
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
|
|
|
@ -683,7 +683,8 @@ dict_table_get_on_id(
|
|||
if we are doing a rollback to handle an error in TABLE
|
||||
CREATE, for example, we already have the mutex! */
|
||||
|
||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||
ut_ad(mutex_own(&(dict_sys->mutex))
|
||||
|| trx->dict_operation_lock_mode == RW_X_LATCH);
|
||||
|
||||
return(dict_table_get_on_id_low(table_id));
|
||||
}
|
||||
|
@ -1411,7 +1412,7 @@ dict_index_add_to_cache(
|
|||
dict_index_get_nth_field(new_index, i)->col->ord_part = 1;
|
||||
}
|
||||
|
||||
new_index->page = page_no;
|
||||
new_index->page = (unsigned int) page_no;
|
||||
rw_lock_create(&new_index->lock, SYNC_INDEX_TREE);
|
||||
|
||||
if (!UNIV_UNLIKELY(new_index->type & DICT_UNIVERSAL)) {
|
||||
|
@ -1522,10 +1523,10 @@ dict_index_add_col(
|
|||
field = dict_index_get_nth_field(index, index->n_def - 1);
|
||||
|
||||
field->col = col;
|
||||
field->fixed_len = dict_col_get_fixed_size(col);
|
||||
field->fixed_len = (unsigned int) dict_col_get_fixed_size(col);
|
||||
|
||||
if (prefix_len && field->fixed_len > prefix_len) {
|
||||
field->fixed_len = prefix_len;
|
||||
field->fixed_len = (unsigned int) prefix_len;
|
||||
}
|
||||
|
||||
/* Long fixed-length fields that need external storage are treated as
|
||||
|
@ -1726,7 +1727,7 @@ dict_index_build_internal_clust(
|
|||
break;
|
||||
}
|
||||
|
||||
new_index->trx_id_offset += fixed_size;
|
||||
new_index->trx_id_offset += (unsigned int) fixed_size;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3039,7 +3040,7 @@ col_loop1:
|
|||
foreign->foreign_table_name = mem_heap_strdup(foreign->heap,
|
||||
table->name);
|
||||
foreign->foreign_index = index;
|
||||
foreign->n_fields = i;
|
||||
foreign->n_fields = (unsigned int) i;
|
||||
foreign->foreign_col_names = mem_heap_alloc(foreign->heap,
|
||||
i * sizeof(void*));
|
||||
for (i = 0; i < foreign->n_fields; i++) {
|
||||
|
|
|
@ -882,7 +882,7 @@ err_exit:
|
|||
table = dict_mem_table_create(name, space, n_cols & ~0x80000000UL,
|
||||
flags);
|
||||
|
||||
table->ibd_file_missing = ibd_file_missing;
|
||||
table->ibd_file_missing = (unsigned int) ibd_file_missing;
|
||||
|
||||
ut_a(name_of_col_is(sys_tables, sys_index, 3, "ID"));
|
||||
|
||||
|
@ -1217,8 +1217,8 @@ dict_load_foreign(
|
|||
|
||||
/* We store the type in the bits 24..29 of n_fields_and_type. */
|
||||
|
||||
foreign->type = n_fields_and_type >> 24;
|
||||
foreign->n_fields = n_fields_and_type & 0x3FFUL;
|
||||
foreign->type = (unsigned int) (n_fields_and_type >> 24);
|
||||
foreign->n_fields = (unsigned int) (n_fields_and_type & 0x3FFUL);
|
||||
|
||||
foreign->id = mem_heap_strdup(foreign->heap, id);
|
||||
|
||||
|
|
|
@ -49,14 +49,14 @@ dict_mem_table_create(
|
|||
|
||||
table->heap = heap;
|
||||
|
||||
table->flags = flags;
|
||||
table->flags = (unsigned int) flags;
|
||||
table->name = mem_heap_strdup(heap, name);
|
||||
table->dir_path_of_temp_table = NULL;
|
||||
table->space = space;
|
||||
table->space = (unsigned int) space;
|
||||
table->ibd_file_missing = FALSE;
|
||||
table->tablespace_discarded = FALSE;
|
||||
table->n_def = 0;
|
||||
table->n_cols = n_cols + DATA_N_SYS_COLS;
|
||||
table->n_cols = (unsigned int) (n_cols + DATA_N_SYS_COLS);
|
||||
|
||||
table->n_mysql_handles_opened = 0;
|
||||
table->n_foreign_key_checks_running = 0;
|
||||
|
@ -202,14 +202,14 @@ dict_mem_table_add_col(
|
|||
col->ind = i;
|
||||
col->ord_part = 0;
|
||||
|
||||
col->mtype = mtype;
|
||||
col->prtype = prtype;
|
||||
col->len = len;
|
||||
col->mtype = (unsigned int) mtype;
|
||||
col->prtype = (unsigned int) prtype;
|
||||
col->len = (unsigned int) len;
|
||||
|
||||
dtype_get_mblen(mtype, prtype, &mbminlen, &mbmaxlen);
|
||||
|
||||
col->mbminlen = mbminlen;
|
||||
col->mbmaxlen = mbmaxlen;
|
||||
col->mbminlen = (unsigned int) mbminlen;
|
||||
col->mbmaxlen = (unsigned int) mbmaxlen;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -239,13 +239,13 @@ dict_mem_index_create(
|
|||
index->heap = heap;
|
||||
|
||||
index->type = type;
|
||||
index->space = space;
|
||||
index->space = (unsigned int) space;
|
||||
index->page = 0;
|
||||
index->name = mem_heap_strdup(heap, index_name);
|
||||
index->table_name = table_name;
|
||||
index->table = NULL;
|
||||
index->n_def = index->n_nullable = 0;
|
||||
index->n_fields = n_fields;
|
||||
index->n_fields = (unsigned int) n_fields;
|
||||
index->fields = mem_heap_alloc(heap, 1 + n_fields
|
||||
* sizeof(dict_field_t));
|
||||
/* The '1 +' above prevents allocation
|
||||
|
@ -320,7 +320,7 @@ dict_mem_index_add_field(
|
|||
field = dict_index_get_nth_field(index, index->n_def - 1);
|
||||
|
||||
field->name = name;
|
||||
field->prefix_len = prefix_len;
|
||||
field->prefix_len = (unsigned int) prefix_len;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
|
|
@ -194,7 +194,7 @@ for_step(
|
|||
loop_var_value = eval_node_get_int_val(node->loop_start_limit);
|
||||
|
||||
node->loop_end_value
|
||||
= eval_node_get_int_val(node->loop_end_limit);
|
||||
= (int) eval_node_get_int_val(node->loop_end_limit);
|
||||
}
|
||||
|
||||
/* Check if we should do another loop */
|
||||
|
|
|
@ -93,9 +93,6 @@ extern "C" {
|
|||
#include "../storage/innobase/include/ha_prototypes.h"
|
||||
}
|
||||
|
||||
#define HA_INNOBASE_ROWS_IN_TABLE 10000 /* to get optimization right */
|
||||
#define HA_INNOBASE_RANGE_COUNT 100
|
||||
|
||||
ulong innobase_large_page_size = 0;
|
||||
|
||||
/* The default values for the following, type long or longlong, start-up
|
||||
|
@ -133,6 +130,7 @@ my_bool innobase_file_per_table = FALSE;
|
|||
my_bool innobase_locks_unsafe_for_binlog = FALSE;
|
||||
my_bool innobase_rollback_on_timeout = FALSE;
|
||||
my_bool innobase_create_status_file = FALSE;
|
||||
my_bool innobase_stats_on_metadata = TRUE;
|
||||
|
||||
static char *internal_innobase_data_file_path = NULL;
|
||||
|
||||
|
@ -142,7 +140,7 @@ srv_active_wake_master_thread after each fetch or search, we only do
|
|||
it every INNOBASE_WAKE_INTERVAL'th step. */
|
||||
|
||||
#define INNOBASE_WAKE_INTERVAL 32
|
||||
ulong innobase_active_counter = 0;
|
||||
static ulong innobase_active_counter = 0;
|
||||
|
||||
static HASH innobase_open_tables;
|
||||
|
||||
|
@ -311,14 +309,13 @@ bool innobase_show_status(handlerton *hton, THD* thd,
|
|||
|
||||
/*********************************************************************
|
||||
Commits a transaction in an InnoDB database. */
|
||||
|
||||
static
|
||||
void
|
||||
innobase_commit_low(
|
||||
/*================*/
|
||||
trx_t* trx); /* in: transaction handle */
|
||||
|
||||
static
|
||||
SHOW_VAR innodb_status_variables[]= {
|
||||
static SHOW_VAR innodb_status_variables[]= {
|
||||
{"buffer_pool_pages_data",
|
||||
(char*) &export_vars.innodb_buffer_pool_pages_data, SHOW_LONG},
|
||||
{"buffer_pool_pages_dirty",
|
||||
|
@ -796,7 +793,7 @@ innobase_convert_from_table_id(
|
|||
uint errors;
|
||||
|
||||
strconvert(current_thd->charset(), from,
|
||||
&my_charset_filename, to, len, &errors);
|
||||
&my_charset_filename, to, (uint) len, &errors);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -815,7 +812,7 @@ innobase_convert_from_id(
|
|||
uint errors;
|
||||
|
||||
strconvert(current_thd->charset(), from,
|
||||
system_charset_info, to, len, &errors);
|
||||
system_charset_info, to, (uint) len, &errors);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -940,8 +937,9 @@ innobase_convert_string(
|
|||
CHARSET_INFO* from_cs,
|
||||
uint* errors)
|
||||
{
|
||||
return(copy_and_convert((char*)to, to_length, to_cs,
|
||||
(const char*)from, from_length, from_cs, errors));
|
||||
return(copy_and_convert((char*)to, (uint32) to_length, to_cs,
|
||||
(const char*)from, (uint32) from_length, from_cs,
|
||||
errors));
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
@ -1140,7 +1138,7 @@ holding any InnoDB semaphores. The calling thread is holding the
|
|||
query cache mutex, and this function will reserver the InnoDB kernel mutex.
|
||||
Thus, the 'rank' in sync0sync.h of the MySQL query cache mutex is above
|
||||
the InnoDB kernel mutex. */
|
||||
|
||||
static
|
||||
my_bool
|
||||
innobase_query_caching_of_table_permitted(
|
||||
/*======================================*/
|
||||
|
@ -1299,9 +1297,9 @@ innobase_print_identifier(
|
|||
output strings buffers must not be shared. The function
|
||||
only produces more output when the name contains other
|
||||
characters than [0-9A-Z_a-z]. */
|
||||
char* temp_name = my_malloc(namelen + 1, MYF(MY_WME));
|
||||
uint qnamelen = namelen
|
||||
+ (1 + sizeof srv_mysql50_table_name_prefix);
|
||||
char* temp_name = my_malloc((uint) namelen + 1, MYF(MY_WME));
|
||||
uint qnamelen = (uint) (namelen
|
||||
+ (1 + sizeof srv_mysql50_table_name_prefix));
|
||||
|
||||
if (temp_name) {
|
||||
qname = my_malloc(qnamelen, MYF(MY_WME));
|
||||
|
@ -1635,6 +1633,8 @@ innobase_init(void *p)
|
|||
srv_max_n_open_files = (ulint) innobase_open_files;
|
||||
srv_innodb_status = (ibool) innobase_create_status_file;
|
||||
|
||||
srv_stats_on_metadata = (ibool) innobase_stats_on_metadata;
|
||||
|
||||
srv_print_verbose_log = mysqld_embedded ? 0 : 1;
|
||||
|
||||
/* Store the default charset-collation number of this MySQL
|
||||
|
@ -1743,7 +1743,7 @@ innobase_flush_logs(handlerton *hton)
|
|||
|
||||
/*********************************************************************
|
||||
Commits a transaction in an InnoDB database. */
|
||||
|
||||
static
|
||||
void
|
||||
innobase_commit_low(
|
||||
/*================*/
|
||||
|
@ -1827,12 +1827,11 @@ innobase_commit(
|
|||
/* Update the info whether we should skip XA steps that eat CPU time */
|
||||
trx->support_xa = (ibool)(thd->variables.innodb_support_xa);
|
||||
|
||||
/* Release a possible FIFO ticket and search latch. Since we will
|
||||
reserve the kernel mutex, we have to release the search system latch
|
||||
first to obey the latching order. */
|
||||
/* Since we will reserve the kernel mutex, we have to release
|
||||
the search system latch first to obey the latching order. */
|
||||
|
||||
if (trx->has_search_latch) {
|
||||
trx_search_latch_release_if_reserved(trx);
|
||||
trx_search_latch_release_if_reserved(trx);
|
||||
}
|
||||
|
||||
/* The flag trx->active_trans is set to 1 in
|
||||
|
@ -1919,18 +1918,20 @@ retry:
|
|||
trx_mark_sql_stat_end(trx);
|
||||
}
|
||||
|
||||
if (trx->declared_to_be_inside_innodb) {
|
||||
/* Release our possible ticket in the FIFO */
|
||||
|
||||
srv_conc_force_exit_innodb(trx);
|
||||
}
|
||||
|
||||
/* Tell the InnoDB server that there might be work for utility
|
||||
threads: */
|
||||
if (trx->declared_to_be_inside_innodb) {
|
||||
/* Release our possible ticket in the FIFO */
|
||||
|
||||
srv_conc_force_exit_innodb(trx);
|
||||
}
|
||||
srv_active_wake_master_thread();
|
||||
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* TODO: put the
|
||||
MySQL-4.1 functionality back to 5.0. This is needed to get InnoDB Hot Backup
|
||||
to work. */
|
||||
|
@ -1943,7 +1944,7 @@ transaction inside InnoDB but does NOT flush InnoDB log files to disk.
|
|||
To flush you have to call innobase_commit_complete(). We have separated
|
||||
flushing to eliminate the bottleneck of LOCK_log in log.cc which disabled
|
||||
InnoDB's group commit capability. */
|
||||
|
||||
static
|
||||
int
|
||||
innobase_report_binlog_offset_and_commit(
|
||||
/*=====================================*/
|
||||
|
@ -1973,7 +1974,6 @@ innobase_report_binlog_offset_and_commit(
|
|||
return(0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/***********************************************************************
|
||||
This function stores the binlog offset and flushes logs. */
|
||||
static
|
||||
|
@ -2004,12 +2004,11 @@ innobase_store_binlog_offset_and_flush_log(
|
|||
/* Synchronous flush of the log buffer to disk */
|
||||
log_buffer_flush_to_disk();
|
||||
}
|
||||
#endif
|
||||
|
||||
/*********************************************************************
|
||||
This is called after MySQL has written the binlog entry for the current
|
||||
transaction. Flushes the InnoDB log files to disk if required. */
|
||||
|
||||
static
|
||||
int
|
||||
innobase_commit_complete(
|
||||
/*=====================*/
|
||||
|
@ -2035,6 +2034,7 @@ innobase_commit_complete(
|
|||
|
||||
return(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*********************************************************************
|
||||
Rolls back a transaction or the latest SQL statement. */
|
||||
|
@ -2088,7 +2088,7 @@ innobase_rollback(
|
|||
|
||||
/*********************************************************************
|
||||
Rolls back a transaction */
|
||||
|
||||
static
|
||||
int
|
||||
innobase_rollback_trx(
|
||||
/*==================*/
|
||||
|
@ -2383,8 +2383,6 @@ ha_innobase::open(
|
|||
|
||||
user_thd = NULL;
|
||||
|
||||
last_query_id = (ulong)-1;
|
||||
|
||||
if (!(share=get_share(name))) {
|
||||
|
||||
DBUG_RETURN(1);
|
||||
|
@ -2934,7 +2932,8 @@ ha_innobase::store_key_val_for_row(
|
|||
true_len = (ulint) cs->cset->well_formed_len(cs,
|
||||
(const char *) data,
|
||||
(const char *) data + len,
|
||||
key_len / cs->mbmaxlen,
|
||||
(uint) (key_len /
|
||||
cs->mbmaxlen),
|
||||
&error);
|
||||
}
|
||||
|
||||
|
@ -3003,7 +3002,8 @@ ha_innobase::store_key_val_for_row(
|
|||
(const char *) blob_data,
|
||||
(const char *) blob_data
|
||||
+ blob_len,
|
||||
key_len / cs->mbmaxlen,
|
||||
(uint) (key_len /
|
||||
cs->mbmaxlen),
|
||||
&error);
|
||||
}
|
||||
|
||||
|
@ -3075,7 +3075,8 @@ ha_innobase::store_key_val_for_row(
|
|||
(const char *)src_start,
|
||||
(const char *)src_start
|
||||
+ key_len,
|
||||
key_len / cs->mbmaxlen,
|
||||
(uint) (key_len /
|
||||
cs->mbmaxlen),
|
||||
&error);
|
||||
}
|
||||
}
|
||||
|
@ -3349,8 +3350,7 @@ ha_innobase::write_row(
|
|||
ut_error;
|
||||
}
|
||||
|
||||
statistic_increment(thd->status_var.ha_write_count,
|
||||
&LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_write_count);
|
||||
|
||||
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT)
|
||||
table->timestamp_field->set_time();
|
||||
|
@ -3425,13 +3425,6 @@ no_commit:
|
|||
|
||||
num_write_row++;
|
||||
|
||||
if (last_query_id != user_thd->query_id) {
|
||||
prebuilt->sql_stat_start = TRUE;
|
||||
last_query_id = user_thd->query_id;
|
||||
|
||||
innobase_release_stat_resources(prebuilt->trx);
|
||||
}
|
||||
|
||||
if (table->next_number_field && record == table->record[0]) {
|
||||
/* This is the case where the table has an
|
||||
auto-increment column */
|
||||
|
@ -3586,13 +3579,6 @@ calc_row_difference(
|
|||
for (i = 0; i < n_fields; i++) {
|
||||
field = table->field[i];
|
||||
|
||||
/* if (thd->query_id != field->query_id) { */
|
||||
/* TODO: check that these fields cannot have
|
||||
changed! */
|
||||
|
||||
/* goto skip_field;
|
||||
}*/
|
||||
|
||||
o_ptr = (byte*) old_row + get_field_offset(table, field);
|
||||
n_ptr = (byte*) new_row + get_field_offset(table, field);
|
||||
|
||||
|
@ -3724,13 +3710,6 @@ ha_innobase::update_row(
|
|||
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
|
||||
table->timestamp_field->set_time();
|
||||
|
||||
if (last_query_id != user_thd->query_id) {
|
||||
prebuilt->sql_stat_start = TRUE;
|
||||
last_query_id = user_thd->query_id;
|
||||
|
||||
innobase_release_stat_resources(trx);
|
||||
}
|
||||
|
||||
if (prebuilt->upd_node) {
|
||||
uvect = prebuilt->upd_node->update;
|
||||
} else {
|
||||
|
@ -3781,13 +3760,6 @@ ha_innobase::delete_row(
|
|||
|
||||
ut_a(prebuilt->trx == trx);
|
||||
|
||||
if (last_query_id != user_thd->query_id) {
|
||||
prebuilt->sql_stat_start = TRUE;
|
||||
last_query_id = user_thd->query_id;
|
||||
|
||||
innobase_release_stat_resources(trx);
|
||||
}
|
||||
|
||||
if (!prebuilt->upd_node) {
|
||||
row_get_prebuilt_update_vector(prebuilt);
|
||||
}
|
||||
|
@ -3823,15 +3795,6 @@ ha_innobase::unlock_row(void)
|
|||
{
|
||||
DBUG_ENTER("ha_innobase::unlock_row");
|
||||
|
||||
if (UNIV_UNLIKELY(last_query_id != user_thd->query_id)) {
|
||||
ut_print_timestamp(stderr);
|
||||
sql_print_error("last_query_id is %lu != user_thd_query_id is "
|
||||
"%lu", (ulong) last_query_id,
|
||||
(ulong) user_thd->query_id);
|
||||
mem_analyze_corruption(prebuilt->trx);
|
||||
ut_error;
|
||||
}
|
||||
|
||||
/* Consistent read does not take any locks, thus there is
|
||||
nothing to unlock. */
|
||||
|
||||
|
@ -4037,15 +4000,7 @@ ha_innobase::index_read(
|
|||
|
||||
ut_a(prebuilt->trx == thd_to_trx(current_thd, ht));
|
||||
|
||||
statistic_increment(current_thd->status_var.ha_read_key_count,
|
||||
&LOCK_status);
|
||||
|
||||
if (last_query_id != user_thd->query_id) {
|
||||
prebuilt->sql_stat_start = TRUE;
|
||||
last_query_id = user_thd->query_id;
|
||||
|
||||
innobase_release_stat_resources(prebuilt->trx);
|
||||
}
|
||||
ha_statistic_increment(&SSV::ha_read_key_count);
|
||||
|
||||
index = prebuilt->index;
|
||||
|
||||
|
@ -4143,12 +4098,11 @@ ha_innobase::change_active_index(
|
|||
InnoDB */
|
||||
{
|
||||
KEY* key=0;
|
||||
THD* thd = current_thd;
|
||||
statistic_increment(thd->status_var.ha_read_key_count, &LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_read_key_count);
|
||||
DBUG_ENTER("change_active_index");
|
||||
|
||||
ut_ad(user_thd == thd);
|
||||
ut_a(prebuilt->trx == thd_to_trx(thd, ht));
|
||||
ut_ad(user_thd == current_thd);
|
||||
ut_a(prebuilt->trx == thd_to_trx(user_thd, ht));
|
||||
|
||||
active_index = keynr;
|
||||
|
||||
|
@ -4275,8 +4229,7 @@ ha_innobase::index_next(
|
|||
mysql_byte* buf) /* in/out: buffer for next row in MySQL
|
||||
format */
|
||||
{
|
||||
statistic_increment(current_thd->status_var.ha_read_next_count,
|
||||
&LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_read_next_count);
|
||||
|
||||
return(general_fetch(buf, ROW_SEL_NEXT, 0));
|
||||
}
|
||||
|
@ -4293,8 +4246,7 @@ ha_innobase::index_next_same(
|
|||
const mysql_byte* key, /* in: key value */
|
||||
uint keylen) /* in: key value length */
|
||||
{
|
||||
statistic_increment(current_thd->status_var.ha_read_next_count,
|
||||
&LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_read_next_count);
|
||||
|
||||
return(general_fetch(buf, ROW_SEL_NEXT, last_match_mode));
|
||||
}
|
||||
|
@ -4311,8 +4263,7 @@ ha_innobase::index_prev(
|
|||
mysql_byte* buf) /* in/out: buffer for previous row in MySQL
|
||||
format */
|
||||
{
|
||||
statistic_increment(current_thd->status_var.ha_read_prev_count,
|
||||
&LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_read_prev_count);
|
||||
|
||||
return(general_fetch(buf, ROW_SEL_PREV, 0));
|
||||
}
|
||||
|
@ -4331,8 +4282,7 @@ ha_innobase::index_first(
|
|||
int error;
|
||||
|
||||
DBUG_ENTER("index_first");
|
||||
statistic_increment(current_thd->status_var.ha_read_first_count,
|
||||
&LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_read_first_count);
|
||||
|
||||
error = index_read(buf, NULL, 0, HA_READ_AFTER_KEY);
|
||||
|
||||
|
@ -4358,8 +4308,7 @@ ha_innobase::index_last(
|
|||
int error;
|
||||
|
||||
DBUG_ENTER("index_last");
|
||||
statistic_increment(current_thd->status_var.ha_read_last_count,
|
||||
&LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_read_last_count);
|
||||
|
||||
error = index_read(buf, NULL, 0, HA_READ_BEFORE_KEY);
|
||||
|
||||
|
@ -4429,8 +4378,7 @@ ha_innobase::rnd_next(
|
|||
int error;
|
||||
|
||||
DBUG_ENTER("rnd_next");
|
||||
statistic_increment(current_thd->status_var.ha_read_rnd_next_count,
|
||||
&LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_read_rnd_next_count);
|
||||
|
||||
if (start_of_scan) {
|
||||
error = index_first(buf);
|
||||
|
@ -4465,8 +4413,7 @@ ha_innobase::rnd_pos(
|
|||
DBUG_ENTER("rnd_pos");
|
||||
DBUG_DUMP("key", (char*) pos, ref_length);
|
||||
|
||||
statistic_increment(current_thd->status_var.ha_read_rnd_count,
|
||||
&LOCK_status);
|
||||
ha_statistic_increment(&SSV::ha_read_rnd_count);
|
||||
|
||||
ut_a(prebuilt->trx == thd_to_trx(current_thd, ht));
|
||||
|
||||
|
@ -5561,15 +5508,17 @@ ha_innobase::info(
|
|||
ib_table = prebuilt->table;
|
||||
|
||||
if (flag & HA_STATUS_TIME) {
|
||||
/* In sql_show we call with this flag: update then statistics
|
||||
so that they are up-to-date */
|
||||
if (srv_stats_on_metadata) {
|
||||
/* In sql_show we call with this flag: update then statistics
|
||||
so that they are up-to-date */
|
||||
|
||||
prebuilt->trx->op_info = (char*)"updating table statistics";
|
||||
prebuilt->trx->op_info = (char*)"updating table statistics";
|
||||
|
||||
dict_update_statistics(ib_table);
|
||||
dict_update_statistics(ib_table);
|
||||
|
||||
prebuilt->trx->op_info = (char*)
|
||||
"returning various info to MySQL";
|
||||
prebuilt->trx->op_info = (char*)
|
||||
"returning various info to MySQL";
|
||||
}
|
||||
|
||||
my_snprintf(path, sizeof(path), "%s/%s%s",
|
||||
mysql_data_home, ib_table->name, reg_ext);
|
||||
|
@ -6620,7 +6569,7 @@ innodb_show_status(
|
|||
|
||||
/****************************************************************************
|
||||
Implements the SHOW MUTEX STATUS command. . */
|
||||
|
||||
static
|
||||
bool
|
||||
innodb_mutex_show_status(
|
||||
/*=====================*/
|
||||
|
@ -6841,6 +6790,16 @@ ha_innobase::store_lock(
|
|||
trx->isolation_level = innobase_map_isolation_level(
|
||||
(enum_tx_isolation)
|
||||
thd->variables.tx_isolation);
|
||||
|
||||
if (trx->isolation_level <= TRX_ISO_READ_COMMITTED
|
||||
&& trx->global_read_view) {
|
||||
|
||||
/* At low transaction isolation levels we let
|
||||
each consistent read set its own snapshot */
|
||||
|
||||
read_view_close_for_mysql(trx);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const bool in_lock_tables = thd_in_lock_tables(thd);
|
||||
|
@ -7295,6 +7254,33 @@ ha_innobase::cmp_ref(
|
|||
return(0);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
Ask InnoDB if a query to a table can be cached. */
|
||||
|
||||
my_bool
|
||||
ha_innobase::register_query_cache_table(
|
||||
/*====================================*/
|
||||
/* out: TRUE if query caching
|
||||
of the table is permitted */
|
||||
THD* thd, /* in: user thread handle */
|
||||
char* table_key, /* in: concatenation of database name,
|
||||
the null character '\0',
|
||||
and the table name */
|
||||
uint key_length, /* in: length of the full name, i.e.
|
||||
len(dbname) + len(tablename) + 1 */
|
||||
qc_engine_callback*
|
||||
call_back, /* out: pointer to function for
|
||||
checking if query caching
|
||||
is permitted */
|
||||
ulonglong *engine_data) /* in/out: data to call_back */
|
||||
{
|
||||
*call_back = innobase_query_caching_of_table_permitted;
|
||||
*engine_data = 0;
|
||||
return(innobase_query_caching_of_table_permitted(thd, table_key,
|
||||
key_length,
|
||||
engine_data));
|
||||
}
|
||||
|
||||
char*
|
||||
ha_innobase::get_mysql_bin_log_name()
|
||||
{
|
||||
|
@ -7744,8 +7730,7 @@ static int show_innodb_vars(THD *thd, SHOW_VAR *var, char *buff)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static
|
||||
SHOW_VAR innodb_status_variables_export[]= {
|
||||
static SHOW_VAR innodb_status_variables_export[]= {
|
||||
{"Innodb", (char*) &show_innodb_vars, SHOW_FUNC},
|
||||
{NullS, NullS, SHOW_LONG}
|
||||
};
|
||||
|
|
|
@ -35,10 +35,6 @@ typedef struct st_innobase_share {
|
|||
struct row_prebuilt_struct;
|
||||
typedef struct row_prebuilt_struct row_prebuilt_t;
|
||||
|
||||
my_bool innobase_query_caching_of_table_permitted(THD* thd, char* full_name,
|
||||
uint full_name_len,
|
||||
ulonglong *unused);
|
||||
|
||||
/* The class defining a handle to an Innodb table */
|
||||
class ha_innobase: public handler
|
||||
{
|
||||
|
@ -48,8 +44,6 @@ class ha_innobase: public handler
|
|||
THD* user_thd; /* the thread handle of the user
|
||||
currently using the handle; this is
|
||||
set in external_lock function */
|
||||
query_id_t last_query_id; /* the latest query id where the
|
||||
handle was used */
|
||||
THR_LOCK_DATA lock;
|
||||
INNOBASE_SHARE *share;
|
||||
|
||||
|
@ -186,14 +180,7 @@ class ha_innobase: public handler
|
|||
my_bool register_query_cache_table(THD *thd, char *table_key,
|
||||
uint key_length,
|
||||
qc_engine_callback *call_back,
|
||||
ulonglong *engine_data)
|
||||
{
|
||||
*call_back= innobase_query_caching_of_table_permitted;
|
||||
*engine_data= 0;
|
||||
return innobase_query_caching_of_table_permitted(thd, table_key,
|
||||
key_length,
|
||||
engine_data);
|
||||
}
|
||||
ulonglong *engine_data);
|
||||
static char *get_mysql_bin_log_name();
|
||||
static ulonglong get_mysql_bin_log_pos();
|
||||
bool primary_key_is_clustered() { return true; }
|
||||
|
@ -222,7 +209,8 @@ extern my_bool innobase_log_archive,
|
|||
innobase_use_native_aio,
|
||||
innobase_file_per_table, innobase_locks_unsafe_for_binlog,
|
||||
innobase_rollback_on_timeout,
|
||||
innobase_create_status_file;
|
||||
innobase_create_status_file,
|
||||
innobase_stats_on_metadata;
|
||||
extern "C" {
|
||||
extern ulong srv_buf_pool_curr_size;
|
||||
extern ulong srv_buf_pool_size;
|
||||
|
|
|
@ -1103,6 +1103,9 @@ rec_offs_nth_size(
|
|||
{
|
||||
ut_ad(rec_offs_validate(NULL, NULL, offsets));
|
||||
ut_ad(n < rec_offs_n_fields(offsets));
|
||||
if (!n) {
|
||||
return(rec_offs_base(offsets)[1 + n] & REC_OFFS_MASK);
|
||||
}
|
||||
return((rec_offs_base(offsets)[1 + n] - rec_offs_base(offsets)[n])
|
||||
& REC_OFFS_MASK);
|
||||
}
|
||||
|
|
|
@ -125,6 +125,8 @@ extern ulint srv_fast_shutdown; /* If this is 1, do not do a
|
|||
transactions). */
|
||||
extern ibool srv_innodb_status;
|
||||
|
||||
extern ibool srv_stats_on_metadata;
|
||||
|
||||
extern ibool srv_use_doublewrite_buf;
|
||||
extern ibool srv_use_checksums;
|
||||
|
||||
|
|
|
@ -375,8 +375,6 @@ trx_is_interrupted(
|
|||
/* Signal to a transaction */
|
||||
struct trx_sig_struct{
|
||||
ulint type; /* signal type */
|
||||
ulint state; /* TRX_SIG_WAITING or
|
||||
TRX_SIG_BEING_HANDLED */
|
||||
ulint sender; /* TRX_SIG_SELF or
|
||||
TRX_SIG_OTHER_SESS */
|
||||
que_thr_t* receiver; /* non-NULL if the sender of the signal
|
||||
|
@ -404,7 +402,7 @@ struct trx_struct{
|
|||
const char* op_info; /* English text describing the
|
||||
current operation, or an empty
|
||||
string */
|
||||
ulint type; /* TRX_USER, TRX_PURGE */
|
||||
unsigned is_purge:1; /* 0=user transaction, 1=purge */
|
||||
ulint conc_state; /* state of the trx from the point
|
||||
of view of concurrency control:
|
||||
TRX_ACTIVE, TRX_COMMITTED_IN_MEMORY,
|
||||
|
@ -675,12 +673,6 @@ struct trx_struct{
|
|||
single operation of a
|
||||
transaction, e.g., a parallel
|
||||
query */
|
||||
/* Transaction types */
|
||||
#define TRX_USER 1 /* normal user transaction */
|
||||
#define TRX_PURGE 2 /* purge transaction: this is not
|
||||
inserted to the trx list of trx_sys
|
||||
and no rollback segment is assigned to
|
||||
this */
|
||||
/* Transaction concurrency states */
|
||||
#define TRX_NOT_STARTED 1
|
||||
#define TRX_ACTIVE 2
|
||||
|
@ -742,9 +734,6 @@ struct trx_struct{
|
|||
session */
|
||||
#define TRX_SIG_OTHER_SESS 2 /* sent by another session (which
|
||||
must hold rights to this) */
|
||||
/* Signal states */
|
||||
#define TRX_SIG_WAITING 1
|
||||
#define TRX_SIG_BEING_HANDLED 2
|
||||
|
||||
/* Commit command node in a query graph */
|
||||
struct commit_node_struct{
|
||||
|
|
|
@ -426,8 +426,8 @@ ut_bit_set_nth(
|
|||
# error "TRUE != 1"
|
||||
#endif
|
||||
if (val) {
|
||||
return((1 << n) | a);
|
||||
return(((ulint) 1 << n) | a);
|
||||
} else {
|
||||
return(~(1 << n) & a);
|
||||
return(~((ulint) 1 << n) & a);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,5 +182,5 @@ ut_2_exp(
|
|||
/* out: 2 to power n */
|
||||
ulint n) /* in: number */
|
||||
{
|
||||
return(1 << n);
|
||||
return((ulint) 1 << n);
|
||||
}
|
||||
|
|
|
@ -3416,12 +3416,6 @@ lock_deadlock_recursive(
|
|||
|
||||
*cost = *cost + 1;
|
||||
|
||||
if ((depth > LOCK_MAX_DEPTH_IN_DEADLOCK_CHECK)
|
||||
|| (*cost > LOCK_MAX_N_STEPS_IN_DEADLOCK_CHECK)) {
|
||||
|
||||
return(LOCK_VICTIM_IS_START);
|
||||
}
|
||||
|
||||
lock = wait_lock;
|
||||
|
||||
if (lock_get_type(wait_lock) == LOCK_REC) {
|
||||
|
@ -3454,11 +3448,18 @@ lock_deadlock_recursive(
|
|||
|
||||
if (lock_has_to_wait(wait_lock, lock)) {
|
||||
|
||||
ibool too_far
|
||||
= depth > LOCK_MAX_DEPTH_IN_DEADLOCK_CHECK
|
||||
|| *cost > LOCK_MAX_N_STEPS_IN_DEADLOCK_CHECK;
|
||||
|
||||
lock_trx = lock->trx;
|
||||
|
||||
if (lock_trx == start) {
|
||||
if (lock_trx == start || too_far) {
|
||||
|
||||
/* We came back to the recursion starting
|
||||
point: a deadlock detected */
|
||||
point: a deadlock detected; or we have
|
||||
searched the waits-for graph too long */
|
||||
|
||||
FILE* ef = lock_latest_err_file;
|
||||
|
||||
rewind(ef);
|
||||
|
@ -3500,9 +3501,20 @@ lock_deadlock_recursive(
|
|||
}
|
||||
#ifdef UNIV_DEBUG
|
||||
if (lock_print_waits) {
|
||||
fputs("Deadlock detected\n", stderr);
|
||||
fputs("Deadlock detected"
|
||||
" or too long search\n",
|
||||
stderr);
|
||||
}
|
||||
#endif /* UNIV_DEBUG */
|
||||
if (too_far) {
|
||||
|
||||
fputs("TOO DEEP OR LONG SEARCH"
|
||||
" IN THE LOCK TABLE"
|
||||
" WAITS-FOR GRAPH\n", ef);
|
||||
|
||||
return(LOCK_VICTIM_IS_START);
|
||||
}
|
||||
|
||||
if (ut_dulint_cmp(wait_lock->trx->undo_no,
|
||||
start->undo_no) >= 0) {
|
||||
/* Our recursion starting point
|
||||
|
|
|
@ -547,7 +547,7 @@ mlog_parse_index(
|
|||
ind = dict_mem_index_create("LOG_DUMMY", "LOG_DUMMY",
|
||||
DICT_HDR_SPACE, 0, n);
|
||||
ind->table = table;
|
||||
ind->n_uniq = n_uniq;
|
||||
ind->n_uniq = (unsigned int) n_uniq;
|
||||
if (n_uniq != n) {
|
||||
ut_a(n_uniq + DATA_ROLL_PTR <= n);
|
||||
ind->type = DICT_CLUSTERED;
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
-- source include/have_innodb.inc
|
||||
# Can't test this with embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
#
|
||||
# Check and select innodb lock type
|
||||
|
|
|
@ -2,11 +2,11 @@ drop table if exists t1;
|
|||
create table t1 (c1 char(5) unique not null, c2 int, stamp timestamp) engine=innodb;
|
||||
select * from t1;
|
||||
c1 c2 stamp
|
||||
replace delayed into t1 (c1, c2) values ( "text1","11"),( "text2","12");
|
||||
replace delayed into t1 (c1, c2) values ( "text1","11");
|
||||
ERROR HY000: Table storage engine for 't1' doesn't have this option
|
||||
select * from t1;
|
||||
c1 c2 stamp
|
||||
replace delayed into t1 (c1, c2) values ( "text1","12"),( "text2","13"),( "text3","14", "a" ),( "text4","15", "b" );
|
||||
replace delayed into t1 (c1, c2) values ( "text1","12");
|
||||
ERROR HY000: Table storage engine for 't1' doesn't have this option
|
||||
select * from t1;
|
||||
c1 c2 stamp
|
||||
|
|
|
@ -12,10 +12,10 @@ drop table if exists t1;
|
|||
create table t1 (c1 char(5) unique not null, c2 int, stamp timestamp) engine=innodb;
|
||||
select * from t1;
|
||||
--error 1031
|
||||
replace delayed into t1 (c1, c2) values ( "text1","11"),( "text2","12");
|
||||
replace delayed into t1 (c1, c2) values ( "text1","11");
|
||||
select * from t1;
|
||||
--error 1031
|
||||
replace delayed into t1 (c1, c2) values ( "text1","12"),( "text2","13"),( "text3","14", "a" ),( "text4","15", "b" );
|
||||
replace delayed into t1 (c1, c2) values ( "text1","12");
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
|
|
|
@ -1984,7 +1984,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 SIMPLE t1 ref c c 11 const # Using where; Using index
|
||||
explain select count(*) from t1 where t='a ';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range t t 13 NULL # Using where
|
||||
1 SIMPLE t1 ref t t 13 const # Using where
|
||||
explain select count(*) from t1 where v like 'a%';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range v v 13 NULL # Using where; Using index
|
||||
|
@ -2666,215 +2666,6 @@ checksum table t1;
|
|||
Table Checksum
|
||||
test.t1 2050879373
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
create table t2 (
|
||||
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t1 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t1 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t1 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
|
||||
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
|
||||
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
|
||||
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
|
||||
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
|
||||
insert into t2 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t2 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
|
||||
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
|
||||
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
|
||||
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
1 61626364656667 61626364656667 boo
|
||||
4 D0B1 D0B1 eight
|
||||
4 5B 5B five
|
||||
4 E880BD E880BD four
|
||||
4 E880BDD0B1E880BD E880BDD0B1E880BD seven
|
||||
4 E880BDE880BD E880BDE880BD six
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
4 05630563 05630563 email
|
||||
4 0563 0563 email
|
||||
4 05612020 05612020 email
|
||||
4 01FC 01FC email
|
||||
4 0120 0120 email
|
||||
4 00640065 00640065 email
|
||||
4 00E400E50068 00E400E50068 email
|
||||
4 0000E400 0000E400 email
|
||||
4 0000563001FC0563 0000563001FC0563 email
|
||||
1 0061006200630064006500660067 0061006200630064006500660067 one
|
||||
3 0071007200730074007500760077 0071007200730074007500760077 three
|
||||
2 0069006A006B0069006C006D006E 0069006A006B0069006C006D006E two
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
create table t1 (
|
||||
a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
create table t2 (
|
||||
a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t1 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t1 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t1 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
|
||||
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
|
||||
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
|
||||
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
|
||||
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
|
||||
insert into t2 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t2 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
|
||||
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
|
||||
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
|
||||
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
1 61626364656667 61626364656667 boo
|
||||
4 D0B1 D0B1 eight
|
||||
4 5B 5B five
|
||||
4 E880BD E880BD four
|
||||
4 E880BDD0B1E880BD E880BDD0B1E880BD seven
|
||||
4 E880BDE880BD E880BDE880BD six
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
4 05630563 05630563 email
|
||||
4 0563 0563 email
|
||||
4 05612020 05612020 email
|
||||
4 01FC 01FC email
|
||||
4 0120 0120 email
|
||||
4 00640065 00640065 email
|
||||
4 00E400E50068 00E400E50068 email
|
||||
4 0000E400 0000E400 email
|
||||
4 0000563001FC0563 0000563001FC0563 email
|
||||
1 0061006200630064006500660067 0061006200630064006500660067 one
|
||||
3 0071007200730074007500760077 0071007200730074007500760077 three
|
||||
2 0069006A006B0069006C006D006E 0069006A006B0069006C006D006E two
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
create table t1 (
|
||||
a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
create table t2 (
|
||||
a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t1 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t1 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t1 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
|
||||
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
|
||||
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
|
||||
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
|
||||
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
|
||||
insert into t2 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t2 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
|
||||
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
|
||||
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
|
||||
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
1 61626364656667 61626364656667 boo
|
||||
4 D0B1 D0B1 eight
|
||||
4 5B 5B five
|
||||
4 E880BD E880BD four
|
||||
4 E880BDD0B1E880BD E880BDD0B1E880BD seven
|
||||
4 E880BDE880BD E880BDE880BD six
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
4 0120 0120 email
|
||||
4 01FC 01FC email
|
||||
4 0563 0563 email
|
||||
4 0000563001FC0563 0000563001FC0563 email
|
||||
4 0000E400 0000E400 email
|
||||
4 00640065 00640065 email
|
||||
4 00E400E50068 00E400E50068 email
|
||||
4 05612020 05612020 email
|
||||
4 05630563 05630563 email
|
||||
1 0061006200630064006500660067 0061006200630064006500660067 one
|
||||
3 0071007200730074007500760077 0071007200730074007500760077 three
|
||||
2 0069006A006B0069006C006D006E 0069006A006B0069006C006D006E two
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
create table t1 (
|
||||
a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
create table t2 (
|
||||
a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t1 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t1 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t1 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
|
||||
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
|
||||
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
|
||||
insert into t2 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t2 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
|
||||
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
|
||||
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
|
||||
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
1 61626364656667 61626364656667 boo
|
||||
4 D0B1 D0B1 eight
|
||||
4 5B 5B five
|
||||
4 E880BD E880BD four
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
4 0000E400 0000E400 email
|
||||
4 00640065 00640065 email
|
||||
4 00E400E50068 00E400E50068 email
|
||||
4 0120 0120 email
|
||||
4 01FC 01FC email
|
||||
4 05612020 05612020 email
|
||||
4 0563 0563 email
|
||||
1 61626364656667 61626364656667 one
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
commit;
|
||||
set foreign_key_checks=0;
|
||||
create table t2 (a int primary key, b int, foreign key (b) references t1(a)) engine = innodb;
|
||||
create table t1(a char(10) primary key, b varchar(20)) engine = innodb;
|
||||
|
@ -3051,109 +2842,6 @@ select hex(s1) from t2;
|
|||
hex(s1)
|
||||
12
|
||||
drop table t2,t1;
|
||||
CREATE TABLE t1 (
|
||||
ind enum('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind enum('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
INSERT INTO t1 VALUES ('1', ''),('2', '');
|
||||
INSERT INTO t2 VALUES ('1', ''),('2', '');
|
||||
SELECT hex(ind),hex(string1) FROM t1 ORDER BY string1;
|
||||
hex(ind) hex(string1)
|
||||
31
|
||||
32
|
||||
SELECT hex(ind),hex(string1) FROM t2 ORDER BY string1;
|
||||
hex(ind) hex(string1)
|
||||
0031
|
||||
0032
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (
|
||||
ind set('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind set('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
INSERT INTO t1 VALUES ('1', ''),('2', '');
|
||||
INSERT INTO t2 VALUES ('1', ''),('2', '');
|
||||
SELECT hex(ind),hex(string1) FROM t1 ORDER BY string1;
|
||||
hex(ind) hex(string1)
|
||||
31
|
||||
32
|
||||
SELECT hex(ind),hex(string1) FROM t2 ORDER BY string1;
|
||||
hex(ind) hex(string1)
|
||||
0031
|
||||
0032
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (
|
||||
ind bit not null,
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind bit not null,
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
insert into t1 values(0,''),(1,'');
|
||||
insert into t2 values(0,''),(1,'');
|
||||
select hex(ind),hex(string1) from t1 order by string1;
|
||||
hex(ind) hex(string1)
|
||||
0
|
||||
1
|
||||
select hex(ind),hex(string1) from t2 order by string1;
|
||||
hex(ind) hex(string1)
|
||||
0
|
||||
1
|
||||
drop table t1,t2;
|
||||
create table t2 (
|
||||
a int, b char(10), filler char(10), primary key(a, b(2))
|
||||
) character set utf8 engine = innodb;
|
||||
insert into t2 values (1,'abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','two');
|
||||
insert into t2 values (3, 'qrstuvw','three');
|
||||
update t2 set a=5, filler='booo' where a=1;
|
||||
drop table t2;
|
||||
create table t2 (
|
||||
a int, b char(10), filler char(10), primary key(a, b(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t2 values (1,'abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','two');
|
||||
insert into t2 values (3, 'qrstuvw','three');
|
||||
update t2 set a=5, filler='booo' where a=1;
|
||||
drop table t2;
|
||||
create table t1(a int not null, b char(110),primary key(a,b(100))) engine=innodb default charset=utf8;
|
||||
insert into t1 values(1,'abcdefg'),(2,'defghijk');
|
||||
insert into t1 values(6,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1);
|
||||
insert into t1 values(7,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2);
|
||||
select a,hex(b) from t1 order by b;
|
||||
a hex(b)
|
||||
1 61626364656667
|
||||
2 6465666768696A6B
|
||||
6 D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1
|
||||
7 D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2
|
||||
update t1 set b = 'three' where a = 6;
|
||||
drop table t1;
|
||||
create table t1(a int not null, b text(110),primary key(a,b(100))) engine=innodb default charset=utf8;
|
||||
insert into t1 values(1,'abcdefg'),(2,'defghijk');
|
||||
insert into t1 values(6,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1);
|
||||
insert into t1 values(7,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2);
|
||||
select a,hex(b) from t1 order by b;
|
||||
a hex(b)
|
||||
1 61626364656667
|
||||
2 6465666768696A6B
|
||||
6 D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1
|
||||
7 D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2
|
||||
update t1 set b = 'three' where a = 6;
|
||||
drop table t1;
|
||||
CREATE TABLE t1(a INT, PRIMARY KEY(a)) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(a INT) ENGINE=InnoDB;
|
||||
ALTER TABLE t2 ADD FOREIGN KEY (a) REFERENCES t1(a);
|
||||
|
@ -3480,3 +3168,12 @@ ALTER TABLE t2 MODIFY a INT NOT NULL;
|
|||
ERROR HY000: Error on rename of '#sql-temporary' to './test/t2' (errno: 150)
|
||||
DELETE FROM t1;
|
||||
DROP TABLE t2,t1;
|
||||
CREATE TABLE t1 (a VARCHAR(5) COLLATE utf8_unicode_ci PRIMARY KEY)
|
||||
ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (0xEFBCA4EFBCA4EFBCA4);
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1 VALUES ('DDD');
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
DDD
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
# #
|
||||
#######################################################################
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
#
|
||||
|
@ -1475,7 +1476,7 @@ INSERT INTO t1 (id) VALUES (NULL);
|
|||
SELECT * FROM t1;
|
||||
DROP TABLE t2, t1;
|
||||
|
||||
-- Test that foreign keys in temporary tables are not accepted (bug #12084)
|
||||
# Test that foreign keys in temporary tables are not accepted (bug #12084)
|
||||
CREATE TABLE t1
|
||||
(
|
||||
id INT PRIMARY KEY
|
||||
|
@ -1629,139 +1630,6 @@ connection default;
|
|||
disconnect a;
|
||||
disconnect b;
|
||||
|
||||
#
|
||||
# BUG 14056 Column prefix index on UTF-8 primary key column causes: Can't find record..
|
||||
#
|
||||
|
||||
create table t1 (
|
||||
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
create table t2 (
|
||||
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t1 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t1 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t1 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
|
||||
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
|
||||
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
|
||||
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
|
||||
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
|
||||
insert into t2 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t2 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
|
||||
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
|
||||
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
|
||||
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
||||
create table t1 (
|
||||
a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
create table t2 (
|
||||
a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t1 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t1 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t1 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
|
||||
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
|
||||
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
|
||||
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
|
||||
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
|
||||
insert into t2 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t2 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
|
||||
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
|
||||
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
|
||||
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
||||
create table t1 (
|
||||
a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
create table t2 (
|
||||
a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t1 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t1 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t1 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
|
||||
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
|
||||
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
|
||||
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
|
||||
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
|
||||
insert into t2 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t2 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
|
||||
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
|
||||
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
|
||||
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
||||
create table t1 (
|
||||
a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
create table t2 (
|
||||
a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t1 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t1 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t1 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
|
||||
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
|
||||
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
|
||||
insert into t2 values (1,'abcdefg','abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','ijkilmn','two');
|
||||
insert into t2 values (3,'qrstuvw','qrstuvw','three');
|
||||
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
|
||||
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
|
||||
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
|
||||
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
commit;
|
||||
|
||||
# tests for bugs #9802 and #13778
|
||||
|
||||
# test that FKs between invalid types are not accepted
|
||||
|
@ -1942,95 +1810,6 @@ select a,hex(s1) from t1;
|
|||
select hex(s1) from t2;
|
||||
|
||||
drop table t2,t1;
|
||||
#
|
||||
# Test cases for bug #15308 Problem of Order with Enum Column in Primary Key
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
ind enum('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind enum('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
|
||||
INSERT INTO t1 VALUES ('1', ''),('2', '');
|
||||
INSERT INTO t2 VALUES ('1', ''),('2', '');
|
||||
SELECT hex(ind),hex(string1) FROM t1 ORDER BY string1;
|
||||
SELECT hex(ind),hex(string1) FROM t2 ORDER BY string1;
|
||||
drop table t1,t2;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
ind set('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind set('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
|
||||
INSERT INTO t1 VALUES ('1', ''),('2', '');
|
||||
INSERT INTO t2 VALUES ('1', ''),('2', '');
|
||||
SELECT hex(ind),hex(string1) FROM t1 ORDER BY string1;
|
||||
SELECT hex(ind),hex(string1) FROM t2 ORDER BY string1;
|
||||
drop table t1,t2;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
ind bit not null,
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind bit not null,
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
insert into t1 values(0,''),(1,'');
|
||||
insert into t2 values(0,''),(1,'');
|
||||
select hex(ind),hex(string1) from t1 order by string1;
|
||||
select hex(ind),hex(string1) from t2 order by string1;
|
||||
drop table t1,t2;
|
||||
|
||||
# tests for bug #14056 Column prefix index on UTF-8 primary key column causes 'Can't find record..'
|
||||
|
||||
create table t2 (
|
||||
a int, b char(10), filler char(10), primary key(a, b(2))
|
||||
) character set utf8 engine = innodb;
|
||||
|
||||
insert into t2 values (1,'abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','two');
|
||||
insert into t2 values (3, 'qrstuvw','three');
|
||||
update t2 set a=5, filler='booo' where a=1;
|
||||
drop table t2;
|
||||
create table t2 (
|
||||
a int, b char(10), filler char(10), primary key(a, b(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
|
||||
insert into t2 values (1,'abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','two');
|
||||
insert into t2 values (3, 'qrstuvw','three');
|
||||
update t2 set a=5, filler='booo' where a=1;
|
||||
drop table t2;
|
||||
|
||||
create table t1(a int not null, b char(110),primary key(a,b(100))) engine=innodb default charset=utf8;
|
||||
insert into t1 values(1,'abcdefg'),(2,'defghijk');
|
||||
insert into t1 values(6,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1);
|
||||
insert into t1 values(7,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2);
|
||||
select a,hex(b) from t1 order by b;
|
||||
update t1 set b = 'three' where a = 6;
|
||||
drop table t1;
|
||||
create table t1(a int not null, b text(110),primary key(a,b(100))) engine=innodb default charset=utf8;
|
||||
insert into t1 values(1,'abcdefg'),(2,'defghijk');
|
||||
insert into t1 values(6,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1);
|
||||
insert into t1 values(7,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2);
|
||||
select a,hex(b) from t1 order by b;
|
||||
update t1 set b = 'three' where a = 6;
|
||||
drop table t1;
|
||||
|
||||
# Ensure that <tablename>_ibfk_0 is not mistreated as a
|
||||
# generated foreign key identifier. (Bug #16387)
|
||||
|
||||
|
@ -2529,6 +2308,18 @@ ALTER TABLE t2 MODIFY a INT NOT NULL;
|
|||
DELETE FROM t1;
|
||||
DROP TABLE t2,t1;
|
||||
|
||||
#
|
||||
# Bug #26835: table corruption after delete+insert
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a VARCHAR(5) COLLATE utf8_unicode_ci PRIMARY KEY)
|
||||
ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (0xEFBCA4EFBCA4EFBCA4);
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1 VALUES ('DDD');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#######################################################################
|
||||
# #
|
||||
# Please, DO NOT TOUCH this file as well as the innodb.result file. #
|
||||
|
|
|
@ -1,464 +0,0 @@
|
|||
SET storage_engine=innodb;
|
||||
DROP TABLE IF EXISTS t1, gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
|
||||
CREATE TABLE gis_point (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g POINT);
|
||||
CREATE TABLE gis_line (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g LINESTRING);
|
||||
CREATE TABLE gis_polygon (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g POLYGON);
|
||||
CREATE TABLE gis_multi_point (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g MULTIPOINT);
|
||||
CREATE TABLE gis_multi_line (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g MULTILINESTRING);
|
||||
CREATE TABLE gis_multi_polygon (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g MULTIPOLYGON);
|
||||
CREATE TABLE gis_geometrycollection (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g GEOMETRYCOLLECTION);
|
||||
CREATE TABLE gis_geometry (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g GEOMETRY);
|
||||
SHOW CREATE TABLE gis_point;
|
||||
Table Create Table
|
||||
gis_point CREATE TABLE `gis_point` (
|
||||
`fid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`g` point DEFAULT NULL,
|
||||
PRIMARY KEY (`fid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SHOW FIELDS FROM gis_point;
|
||||
Field Type Null Key Default Extra
|
||||
fid int(11) NO PRI NULL auto_increment
|
||||
g point YES NULL
|
||||
SHOW FIELDS FROM gis_line;
|
||||
Field Type Null Key Default Extra
|
||||
fid int(11) NO PRI NULL auto_increment
|
||||
g linestring YES NULL
|
||||
SHOW FIELDS FROM gis_polygon;
|
||||
Field Type Null Key Default Extra
|
||||
fid int(11) NO PRI NULL auto_increment
|
||||
g polygon YES NULL
|
||||
SHOW FIELDS FROM gis_multi_point;
|
||||
Field Type Null Key Default Extra
|
||||
fid int(11) NO PRI NULL auto_increment
|
||||
g multipoint YES NULL
|
||||
SHOW FIELDS FROM gis_multi_line;
|
||||
Field Type Null Key Default Extra
|
||||
fid int(11) NO PRI NULL auto_increment
|
||||
g multilinestring YES NULL
|
||||
SHOW FIELDS FROM gis_multi_polygon;
|
||||
Field Type Null Key Default Extra
|
||||
fid int(11) NO PRI NULL auto_increment
|
||||
g multipolygon YES NULL
|
||||
SHOW FIELDS FROM gis_geometrycollection;
|
||||
Field Type Null Key Default Extra
|
||||
fid int(11) NO PRI NULL auto_increment
|
||||
g geometrycollection YES NULL
|
||||
SHOW FIELDS FROM gis_geometry;
|
||||
Field Type Null Key Default Extra
|
||||
fid int(11) NO PRI NULL auto_increment
|
||||
g geometry YES NULL
|
||||
INSERT INTO gis_point VALUES
|
||||
(101, PointFromText('POINT(10 10)')),
|
||||
(102, PointFromText('POINT(20 10)')),
|
||||
(103, PointFromText('POINT(20 20)')),
|
||||
(104, PointFromWKB(AsWKB(PointFromText('POINT(10 20)'))));
|
||||
INSERT INTO gis_line VALUES
|
||||
(105, LineFromText('LINESTRING(0 0,0 10,10 0)')),
|
||||
(106, LineStringFromText('LINESTRING(10 10,20 10,20 20,10 20,10 10)')),
|
||||
(107, LineStringFromWKB(LineString(Point(10, 10), Point(40, 10))));
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(108, PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))')),
|
||||
(109, PolyFromText('POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10 20,10 10))')),
|
||||
(110, PolyFromWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0)))));
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(111, MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)')),
|
||||
(112, MPointFromText('MULTIPOINT(1 1,11 11,11 21,21 21)')),
|
||||
(113, MPointFromWKB(MultiPoint(Point(3, 6), Point(4, 10))));
|
||||
INSERT INTO gis_multi_line VALUES
|
||||
(114, MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))')),
|
||||
(115, MLineFromText('MULTILINESTRING((10 48,10 21,10 0))')),
|
||||
(116, MLineFromWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7)))));
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(117, MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')),
|
||||
(118, MPolyFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')),
|
||||
(119, MPolyFromWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))))));
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
||||
(121, GeometryFromWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9)))));
|
||||
INSERT into gis_geometry SELECT * FROM gis_point;
|
||||
INSERT into gis_geometry SELECT * FROM gis_line;
|
||||
INSERT into gis_geometry SELECT * FROM gis_polygon;
|
||||
INSERT into gis_geometry SELECT * FROM gis_multi_point;
|
||||
INSERT into gis_geometry SELECT * FROM gis_multi_line;
|
||||
INSERT into gis_geometry SELECT * FROM gis_multi_polygon;
|
||||
INSERT into gis_geometry SELECT * FROM gis_geometrycollection;
|
||||
SELECT fid, AsText(g) FROM gis_point ORDER by fid;
|
||||
fid AsText(g)
|
||||
101 POINT(10 10)
|
||||
102 POINT(20 10)
|
||||
103 POINT(20 20)
|
||||
104 POINT(10 20)
|
||||
SELECT fid, AsText(g) FROM gis_line ORDER by fid;
|
||||
fid AsText(g)
|
||||
105 LINESTRING(0 0,0 10,10 0)
|
||||
106 LINESTRING(10 10,20 10,20 20,10 20,10 10)
|
||||
107 LINESTRING(10 10,40 10)
|
||||
SELECT fid, AsText(g) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(g)
|
||||
108 POLYGON((10 10,20 10,20 20,10 20,10 10))
|
||||
109 POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10))
|
||||
110 POLYGON((0 0,30 0,30 30,0 0))
|
||||
SELECT fid, AsText(g) FROM gis_multi_point ORDER by fid;
|
||||
fid AsText(g)
|
||||
111 MULTIPOINT(0 0,10 10,10 20,20 20)
|
||||
112 MULTIPOINT(1 1,11 11,11 21,21 21)
|
||||
113 MULTIPOINT(3 6,4 10)
|
||||
SELECT fid, AsText(g) FROM gis_multi_line ORDER by fid;
|
||||
fid AsText(g)
|
||||
114 MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))
|
||||
115 MULTILINESTRING((10 48,10 21,10 0))
|
||||
116 MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7))
|
||||
SELECT fid, AsText(g) FROM gis_multi_polygon ORDER by fid;
|
||||
fid AsText(g)
|
||||
117 MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
|
||||
118 MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
|
||||
119 MULTIPOLYGON(((0 3,3 3,3 0,0 3)))
|
||||
SELECT fid, AsText(g) FROM gis_geometrycollection ORDER by fid;
|
||||
fid AsText(g)
|
||||
120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
|
||||
121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
|
||||
SELECT fid, AsText(g) FROM gis_geometry ORDER by fid;
|
||||
fid AsText(g)
|
||||
101 POINT(10 10)
|
||||
102 POINT(20 10)
|
||||
103 POINT(20 20)
|
||||
104 POINT(10 20)
|
||||
105 LINESTRING(0 0,0 10,10 0)
|
||||
106 LINESTRING(10 10,20 10,20 20,10 20,10 10)
|
||||
107 LINESTRING(10 10,40 10)
|
||||
108 POLYGON((10 10,20 10,20 20,10 20,10 10))
|
||||
109 POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10))
|
||||
110 POLYGON((0 0,30 0,30 30,0 0))
|
||||
111 MULTIPOINT(0 0,10 10,10 20,20 20)
|
||||
112 MULTIPOINT(1 1,11 11,11 21,21 21)
|
||||
113 MULTIPOINT(3 6,4 10)
|
||||
114 MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))
|
||||
115 MULTILINESTRING((10 48,10 21,10 0))
|
||||
116 MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7))
|
||||
117 MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
|
||||
118 MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
|
||||
119 MULTIPOLYGON(((0 3,3 3,3 0,0 3)))
|
||||
120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
|
||||
121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
|
||||
SELECT fid, Dimension(g) FROM gis_geometry ORDER by fid;
|
||||
fid Dimension(g)
|
||||
101 0
|
||||
102 0
|
||||
103 0
|
||||
104 0
|
||||
105 1
|
||||
106 1
|
||||
107 1
|
||||
108 2
|
||||
109 2
|
||||
110 2
|
||||
111 0
|
||||
112 0
|
||||
113 0
|
||||
114 1
|
||||
115 1
|
||||
116 1
|
||||
117 2
|
||||
118 2
|
||||
119 2
|
||||
120 1
|
||||
121 1
|
||||
SELECT fid, GeometryType(g) FROM gis_geometry ORDER by fid;
|
||||
fid GeometryType(g)
|
||||
101 POINT
|
||||
102 POINT
|
||||
103 POINT
|
||||
104 POINT
|
||||
105 LINESTRING
|
||||
106 LINESTRING
|
||||
107 LINESTRING
|
||||
108 POLYGON
|
||||
109 POLYGON
|
||||
110 POLYGON
|
||||
111 MULTIPOINT
|
||||
112 MULTIPOINT
|
||||
113 MULTIPOINT
|
||||
114 MULTILINESTRING
|
||||
115 MULTILINESTRING
|
||||
116 MULTILINESTRING
|
||||
117 MULTIPOLYGON
|
||||
118 MULTIPOLYGON
|
||||
119 MULTIPOLYGON
|
||||
120 GEOMETRYCOLLECTION
|
||||
121 GEOMETRYCOLLECTION
|
||||
SELECT fid, IsEmpty(g) FROM gis_geometry ORDER by fid;
|
||||
fid IsEmpty(g)
|
||||
101 0
|
||||
102 0
|
||||
103 0
|
||||
104 0
|
||||
105 0
|
||||
106 0
|
||||
107 0
|
||||
108 0
|
||||
109 0
|
||||
110 0
|
||||
111 0
|
||||
112 0
|
||||
113 0
|
||||
114 0
|
||||
115 0
|
||||
116 0
|
||||
117 0
|
||||
118 0
|
||||
119 0
|
||||
120 0
|
||||
121 0
|
||||
SELECT fid, AsText(Envelope(g)) FROM gis_geometry ORDER by fid;
|
||||
fid AsText(Envelope(g))
|
||||
101 POLYGON((10 10,10 10,10 10,10 10,10 10))
|
||||
102 POLYGON((20 10,20 10,20 10,20 10,20 10))
|
||||
103 POLYGON((20 20,20 20,20 20,20 20,20 20))
|
||||
104 POLYGON((10 20,10 20,10 20,10 20,10 20))
|
||||
105 POLYGON((0 0,10 0,10 10,0 10,0 0))
|
||||
106 POLYGON((10 10,20 10,20 20,10 20,10 10))
|
||||
107 POLYGON((10 10,40 10,40 10,10 10,10 10))
|
||||
108 POLYGON((10 10,20 10,20 20,10 20,10 10))
|
||||
109 POLYGON((0 0,50 0,50 50,0 50,0 0))
|
||||
110 POLYGON((0 0,30 0,30 30,0 30,0 0))
|
||||
111 POLYGON((0 0,20 0,20 20,0 20,0 0))
|
||||
112 POLYGON((1 1,21 1,21 21,1 21,1 1))
|
||||
113 POLYGON((3 6,4 6,4 10,3 10,3 6))
|
||||
114 POLYGON((10 0,16 0,16 48,10 48,10 0))
|
||||
115 POLYGON((10 0,10 0,10 48,10 48,10 0))
|
||||
116 POLYGON((1 2,21 2,21 8,1 8,1 2))
|
||||
117 POLYGON((28 0,84 0,84 42,28 42,28 0))
|
||||
118 POLYGON((28 0,84 0,84 42,28 42,28 0))
|
||||
119 POLYGON((0 0,3 0,3 3,0 3,0 0))
|
||||
120 POLYGON((0 0,10 0,10 10,0 10,0 0))
|
||||
121 POLYGON((3 6,44 6,44 9,3 9,3 6))
|
||||
explain extended select Dimension(g), GeometryType(g), IsEmpty(g), AsText(Envelope(g)) from gis_geometry;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE gis_geometry ALL NULL NULL NULL NULL 21 100.00
|
||||
Warnings:
|
||||
Note 1003 select dimension(`test`.`gis_geometry`.`g`) AS `Dimension(g)`,geometrytype(`test`.`gis_geometry`.`g`) AS `GeometryType(g)`,isempty(`test`.`gis_geometry`.`g`) AS `IsEmpty(g)`,astext(envelope(`test`.`gis_geometry`.`g`)) AS `AsText(Envelope(g))` from `test`.`gis_geometry`
|
||||
SELECT fid, X(g) FROM gis_point ORDER by fid;
|
||||
fid X(g)
|
||||
101 10
|
||||
102 20
|
||||
103 20
|
||||
104 10
|
||||
SELECT fid, Y(g) FROM gis_point ORDER by fid;
|
||||
fid Y(g)
|
||||
101 10
|
||||
102 10
|
||||
103 20
|
||||
104 20
|
||||
explain extended select X(g),Y(g) FROM gis_point;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE gis_point ALL NULL NULL NULL NULL 4 100.00
|
||||
Warnings:
|
||||
Note 1003 select x(`test`.`gis_point`.`g`) AS `X(g)`,y(`test`.`gis_point`.`g`) AS `Y(g)` from `test`.`gis_point`
|
||||
SELECT fid, AsText(StartPoint(g)) FROM gis_line ORDER by fid;
|
||||
fid AsText(StartPoint(g))
|
||||
105 POINT(0 0)
|
||||
106 POINT(10 10)
|
||||
107 POINT(10 10)
|
||||
SELECT fid, AsText(EndPoint(g)) FROM gis_line ORDER by fid;
|
||||
fid AsText(EndPoint(g))
|
||||
105 POINT(10 0)
|
||||
106 POINT(10 10)
|
||||
107 POINT(40 10)
|
||||
SELECT fid, GLength(g) FROM gis_line ORDER by fid;
|
||||
fid GLength(g)
|
||||
105 24.142135623731
|
||||
106 40
|
||||
107 30
|
||||
SELECT fid, NumPoints(g) FROM gis_line ORDER by fid;
|
||||
fid NumPoints(g)
|
||||
105 3
|
||||
106 5
|
||||
107 2
|
||||
SELECT fid, AsText(PointN(g, 2)) FROM gis_line ORDER by fid;
|
||||
fid AsText(PointN(g, 2))
|
||||
105 POINT(0 10)
|
||||
106 POINT(20 10)
|
||||
107 POINT(40 10)
|
||||
SELECT fid, IsClosed(g) FROM gis_line ORDER by fid;
|
||||
fid IsClosed(g)
|
||||
105 0
|
||||
106 1
|
||||
107 0
|
||||
explain extended select AsText(StartPoint(g)),AsText(EndPoint(g)),GLength(g),NumPoints(g),AsText(PointN(g, 2)),IsClosed(g) FROM gis_line;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE gis_line ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint(g))`,astext(endpoint(`test`.`gis_line`.`g`)) AS `AsText(EndPoint(g))`,glength(`test`.`gis_line`.`g`) AS `GLength(g)`,numpoints(`test`.`gis_line`.`g`) AS `NumPoints(g)`,astext(pointn(`test`.`gis_line`.`g`,2)) AS `AsText(PointN(g, 2))`,isclosed(`test`.`gis_line`.`g`) AS `IsClosed(g)` from `test`.`gis_line`
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
108 POINT(15 15)
|
||||
109 POINT(25.416666666667 25.416666666667)
|
||||
110 POINT(20 10)
|
||||
SELECT fid, Area(g) FROM gis_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
108 100
|
||||
109 2400
|
||||
110 450
|
||||
SELECT fid, AsText(ExteriorRing(g)) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(ExteriorRing(g))
|
||||
108 LINESTRING(10 10,20 10,20 20,10 20,10 10)
|
||||
109 LINESTRING(0 0,50 0,50 50,0 50,0 0)
|
||||
110 LINESTRING(0 0,30 0,30 30,0 0)
|
||||
SELECT fid, NumInteriorRings(g) FROM gis_polygon ORDER by fid;
|
||||
fid NumInteriorRings(g)
|
||||
108 0
|
||||
109 1
|
||||
110 0
|
||||
SELECT fid, AsText(InteriorRingN(g, 1)) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(InteriorRingN(g, 1))
|
||||
108 NULL
|
||||
109 LINESTRING(10 10,20 10,20 20,10 20,10 10)
|
||||
110 NULL
|
||||
explain extended select AsText(Centroid(g)),Area(g),AsText(ExteriorRing(g)),NumInteriorRings(g),AsText(InteriorRingN(g, 1)) FROM gis_polygon;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE gis_polygon ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select astext(centroid(`test`.`gis_polygon`.`g`)) AS `AsText(Centroid(g))`,area(`test`.`gis_polygon`.`g`) AS `Area(g)`,astext(exteriorring(`test`.`gis_polygon`.`g`)) AS `AsText(ExteriorRing(g))`,numinteriorrings(`test`.`gis_polygon`.`g`) AS `NumInteriorRings(g)`,astext(interiorringn(`test`.`gis_polygon`.`g`,1)) AS `AsText(InteriorRingN(g, 1))` from `test`.`gis_polygon`
|
||||
SELECT fid, IsClosed(g) FROM gis_multi_line ORDER by fid;
|
||||
fid IsClosed(g)
|
||||
114 0
|
||||
115 0
|
||||
116 0
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
117 POINT(55.588527753042 17.426536064114)
|
||||
118 POINT(55.588527753042 17.426536064114)
|
||||
119 POINT(2 2)
|
||||
SELECT fid, Area(g) FROM gis_multi_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
117 1684.5
|
||||
118 1684.5
|
||||
119 4.5
|
||||
SELECT fid, NumGeometries(g) from gis_multi_point ORDER by fid;
|
||||
fid NumGeometries(g)
|
||||
111 4
|
||||
112 4
|
||||
113 2
|
||||
SELECT fid, NumGeometries(g) from gis_multi_line ORDER by fid;
|
||||
fid NumGeometries(g)
|
||||
114 2
|
||||
115 1
|
||||
116 2
|
||||
SELECT fid, NumGeometries(g) from gis_multi_polygon ORDER by fid;
|
||||
fid NumGeometries(g)
|
||||
117 2
|
||||
118 2
|
||||
119 1
|
||||
SELECT fid, NumGeometries(g) from gis_geometrycollection ORDER by fid;
|
||||
fid NumGeometries(g)
|
||||
120 2
|
||||
121 2
|
||||
explain extended SELECT fid, NumGeometries(g) from gis_multi_point;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`gis_multi_point`.`fid` AS `fid`,numgeometries(`test`.`gis_multi_point`.`g`) AS `NumGeometries(g)` from `test`.`gis_multi_point`
|
||||
SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point ORDER by fid;
|
||||
fid AsText(GeometryN(g, 2))
|
||||
111 POINT(10 10)
|
||||
112 POINT(11 11)
|
||||
113 POINT(4 10)
|
||||
SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_line ORDER by fid;
|
||||
fid AsText(GeometryN(g, 2))
|
||||
114 LINESTRING(16 0,16 23,16 48)
|
||||
115 NULL
|
||||
116 LINESTRING(2 5,5 8,21 7)
|
||||
SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_polygon ORDER by fid;
|
||||
fid AsText(GeometryN(g, 2))
|
||||
117 POLYGON((59 18,67 18,67 13,59 13,59 18))
|
||||
118 POLYGON((59 18,67 18,67 13,59 13,59 18))
|
||||
119 NULL
|
||||
SELECT fid, AsText(GeometryN(g, 2)) from gis_geometrycollection ORDER by fid;
|
||||
fid AsText(GeometryN(g, 2))
|
||||
120 LINESTRING(0 0,10 10)
|
||||
121 LINESTRING(3 6,7 9)
|
||||
SELECT fid, AsText(GeometryN(g, 1)) from gis_geometrycollection ORDER by fid;
|
||||
fid AsText(GeometryN(g, 1))
|
||||
120 POINT(0 0)
|
||||
121 POINT(44 6)
|
||||
explain extended SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`gis_multi_point`.`fid` AS `fid`,astext(geometryn(`test`.`gis_multi_point`.`g`,2)) AS `AsText(GeometryN(g, 2))` from `test`.`gis_multi_point`
|
||||
SELECT g1.fid as first, g2.fid as second,
|
||||
Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
|
||||
Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
||||
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
||||
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
||||
first second w c o e d t i r
|
||||
120 120 1 1 0 1 0 0 1 0
|
||||
120 121 0 0 0 0 0 0 1 0
|
||||
121 120 0 0 1 0 0 0 1 0
|
||||
121 121 1 1 0 1 0 0 1 0
|
||||
explain extended SELECT g1.fid as first, g2.fid as second,
|
||||
Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
|
||||
Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
||||
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
||||
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE g1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||
1 SIMPLE g2 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`g1`.`fid` AS `first`,`test`.`g2`.`fid` AS `second`,within(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `w`,contains(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `c`,overlaps(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `o`,equals(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `e`,disjoint(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `d`,touches(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `t`,intersects(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `i`,crosses(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `r` from `test`.`gis_geometrycollection` `g1` join `test`.`gis_geometrycollection` `g2` order by `test`.`g1`.`fid`,`test`.`g2`.`fid`
|
||||
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
|
||||
CREATE TABLE t1 (
|
||||
a INTEGER PRIMARY KEY AUTO_INCREMENT,
|
||||
gp point,
|
||||
ln linestring,
|
||||
pg polygon,
|
||||
mp multipoint,
|
||||
mln multilinestring,
|
||||
mpg multipolygon,
|
||||
gc geometrycollection,
|
||||
gm geometry
|
||||
);
|
||||
SHOW FIELDS FROM t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) NO PRI NULL auto_increment
|
||||
gp point YES NULL
|
||||
ln linestring YES NULL
|
||||
pg polygon YES NULL
|
||||
mp multipoint YES NULL
|
||||
mln multilinestring YES NULL
|
||||
mpg multipolygon YES NULL
|
||||
gc geometrycollection YES NULL
|
||||
gm geometry YES NULL
|
||||
ALTER TABLE t1 ADD fid INT;
|
||||
SHOW FIELDS FROM t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) NO PRI NULL auto_increment
|
||||
gp point YES NULL
|
||||
ln linestring YES NULL
|
||||
pg polygon YES NULL
|
||||
mp multipoint YES NULL
|
||||
mln multilinestring YES NULL
|
||||
mpg multipolygon YES NULL
|
||||
gc geometrycollection YES NULL
|
||||
gm geometry YES NULL
|
||||
fid int(11) YES NULL
|
||||
DROP TABLE t1;
|
||||
create table t1 (pk integer primary key auto_increment, a geometry not null);
|
||||
insert into t1 (a) values (GeomFromText('Point(1 2)'));
|
||||
insert into t1 (a) values ('Garbage');
|
||||
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||
insert IGNORE into t1 (a) values ('Garbage');
|
||||
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||
drop table t1;
|
||||
create table t1 (pk integer primary key auto_increment, fl geometry);
|
||||
insert into t1 (fl) values (1);
|
||||
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||
insert into t1 (fl) values (1.11);
|
||||
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||
insert into t1 (fl) values ("qwerty");
|
||||
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||
insert into t1 (fl) values (pointfromtext('point(1,1)'));
|
||||
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||
drop table t1;
|
||||
create table t1 (g geometry not null, spatial gk(g)) engine=innodb;
|
||||
ERROR HY000: The used table type doesn't support SPATIAL indexes
|
|
@ -1,9 +0,0 @@
|
|||
--source include/have_innodb.inc
|
||||
SET storage_engine=innodb;
|
||||
--source include/gis_generic.inc
|
||||
|
||||
#
|
||||
# Bug #15680 (SPATIAL key in innodb)
|
||||
#
|
||||
--error ER_TABLE_CANT_HANDLE_SPKEYS
|
||||
create table t1 (g geometry not null, spatial gk(g)) engine=innodb;
|
217
os/os0file.c
217
os/os0file.c
|
@ -318,7 +318,7 @@ os_file_get_last_error(
|
|||
|
||||
fflush(stderr);
|
||||
|
||||
if (err == ENOSPC ) {
|
||||
if (err == ENOSPC) {
|
||||
return(OS_FILE_DISK_FULL);
|
||||
#ifdef POSIX_ASYNC_IO
|
||||
} else if (err == EAGAIN) {
|
||||
|
@ -337,15 +337,20 @@ os_file_get_last_error(
|
|||
}
|
||||
|
||||
/********************************************************************
|
||||
Does error handling when a file operation fails. */
|
||||
Does error handling when a file operation fails.
|
||||
Conditionally exits (calling exit(3)) based on should_exit value and the
|
||||
error type */
|
||||
|
||||
static
|
||||
ibool
|
||||
os_file_handle_error(
|
||||
/*=================*/
|
||||
/* out: TRUE if we should retry the
|
||||
operation */
|
||||
const char* name, /* in: name of a file or NULL */
|
||||
const char* operation)/* in: operation */
|
||||
os_file_handle_error_cond_exit(
|
||||
/*===========================*/
|
||||
/* out: TRUE if we should retry the
|
||||
operation */
|
||||
const char* name, /* in: name of a file or NULL */
|
||||
const char* operation, /* in: operation */
|
||||
ibool should_exit) /* in: call exit(3) if unknown error
|
||||
and this parameter is TRUE */
|
||||
{
|
||||
ulint err;
|
||||
|
||||
|
@ -376,11 +381,9 @@ os_file_handle_error(
|
|||
fflush(stderr);
|
||||
|
||||
return(FALSE);
|
||||
|
||||
} else if (err == OS_FILE_AIO_RESOURCES_RESERVED) {
|
||||
|
||||
return(TRUE);
|
||||
|
||||
} else if (err == OS_FILE_ALREADY_EXISTS
|
||||
|| err == OS_FILE_PATH_ERROR) {
|
||||
|
||||
|
@ -392,16 +395,49 @@ os_file_handle_error(
|
|||
|
||||
fprintf(stderr, "InnoDB: File operation call: '%s'.\n",
|
||||
operation);
|
||||
fprintf(stderr, "InnoDB: Cannot continue operation.\n");
|
||||
|
||||
fflush(stderr);
|
||||
if (should_exit) {
|
||||
fprintf(stderr, "InnoDB: Cannot continue operation.\n");
|
||||
|
||||
exit(1);
|
||||
fflush(stderr);
|
||||
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
Does error handling when a file operation fails. */
|
||||
static
|
||||
ibool
|
||||
os_file_handle_error(
|
||||
/*=================*/
|
||||
/* out: TRUE if we should retry the
|
||||
operation */
|
||||
const char* name, /* in: name of a file or NULL */
|
||||
const char* operation)/* in: operation */
|
||||
{
|
||||
/* exit in case of unknown error */
|
||||
return(os_file_handle_error_cond_exit(name, operation, TRUE));
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
Does error handling when a file operation fails. */
|
||||
static
|
||||
ibool
|
||||
os_file_handle_error_no_exit(
|
||||
/*=========================*/
|
||||
/* out: TRUE if we should retry the
|
||||
operation */
|
||||
const char* name, /* in: name of a file or NULL */
|
||||
const char* operation)/* in: operation */
|
||||
{
|
||||
/* don't exit in case of unknown error */
|
||||
return(os_file_handle_error_cond_exit(name, operation, FALSE));
|
||||
}
|
||||
|
||||
#undef USE_FILE_LOCK
|
||||
#define USE_FILE_LOCK
|
||||
#if defined(UNIV_HOTBACKUP) || defined(__WIN__) || defined(__FreeBSD__) || defined(__NETWARE__)
|
||||
|
@ -445,68 +481,6 @@ os_file_lock(
|
|||
}
|
||||
#endif /* USE_FILE_LOCK */
|
||||
|
||||
/********************************************************************
|
||||
Does error handling when a file operation fails. */
|
||||
static
|
||||
ibool
|
||||
os_file_handle_error_no_exit(
|
||||
/*=========================*/
|
||||
/* out: TRUE if we should retry the
|
||||
operation */
|
||||
const char* name, /* in: name of a file or NULL */
|
||||
const char* operation)/* in: operation */
|
||||
{
|
||||
ulint err;
|
||||
|
||||
err = os_file_get_last_error(FALSE);
|
||||
|
||||
if (err == OS_FILE_DISK_FULL) {
|
||||
/* We only print a warning about disk full once */
|
||||
|
||||
if (os_has_said_disk_full) {
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
if (name) {
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Encountered a problem with"
|
||||
" file %s\n", name);
|
||||
}
|
||||
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Disk is full. Try to clean the disk"
|
||||
" to free space.\n");
|
||||
|
||||
os_has_said_disk_full = TRUE;
|
||||
|
||||
fflush(stderr);
|
||||
|
||||
return(FALSE);
|
||||
|
||||
} else if (err == OS_FILE_AIO_RESOURCES_RESERVED) {
|
||||
|
||||
return(TRUE);
|
||||
|
||||
} else if (err == OS_FILE_ALREADY_EXISTS
|
||||
|| err == OS_FILE_PATH_ERROR) {
|
||||
|
||||
return(FALSE);
|
||||
} else {
|
||||
if (name) {
|
||||
fprintf(stderr, "InnoDB: File name %s\n", name);
|
||||
}
|
||||
|
||||
fprintf(stderr, "InnoDB: File operation call: '%s'.\n",
|
||||
operation);
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
return(FALSE); /* not reached */
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
Creates the seek mutexes used in positioned reads and writes. */
|
||||
|
||||
|
@ -930,7 +904,7 @@ try_again:
|
|||
file = CreateFile((LPCTSTR) name,
|
||||
access,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
/* file can be read ansd written also
|
||||
/* file can be read and written also
|
||||
by other processes */
|
||||
NULL, /* default security attributes */
|
||||
create_flag,
|
||||
|
@ -1124,6 +1098,51 @@ os_file_create_simple_no_error_handling(
|
|||
#endif /* __WIN__ */
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
Tries to disable OS caching on an opened file descriptor. */
|
||||
|
||||
void
|
||||
os_file_set_nocache(
|
||||
/*================*/
|
||||
int fd, /* in: file descriptor to alter */
|
||||
const char* file_name, /* in: used in the diagnostic message */
|
||||
const char* operation_name) /* in: used in the diagnostic message,
|
||||
we call os_file_set_nocache()
|
||||
immediately after opening or creating
|
||||
a file, so this is either "open" or
|
||||
"create" */
|
||||
{
|
||||
/* some versions of Solaris may not have DIRECTIO_ON */
|
||||
#if defined(UNIV_SOLARIS) && defined(DIRECTIO_ON)
|
||||
if (directio(fd, DIRECTIO_ON) == -1) {
|
||||
int errno_save;
|
||||
errno_save = (int)errno;
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Failed to set DIRECTIO_ON "
|
||||
"on file %s: %s: %s, continuing anyway\n",
|
||||
file_name, operation_name, strerror(errno_save));
|
||||
}
|
||||
#elif defined(O_DIRECT)
|
||||
if (fcntl(fd, F_SETFL, O_DIRECT) == -1) {
|
||||
int errno_save;
|
||||
errno_save = (int)errno;
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Failed to set O_DIRECT "
|
||||
"on file %s: %s: %s, continuing anyway\n",
|
||||
file_name, operation_name, strerror(errno_save));
|
||||
if (errno_save == EINVAL) {
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: O_DIRECT is known to result in "
|
||||
"'Invalid argument' on Linux on tmpfs, "
|
||||
"see MySQL Bug#26662\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
Opens an existing file or creates a new. */
|
||||
|
||||
|
@ -1306,21 +1325,8 @@ try_again:
|
|||
create_flag = create_flag | O_SYNC;
|
||||
}
|
||||
#endif /* O_SYNC */
|
||||
#ifdef O_DIRECT
|
||||
/* We let O_DIRECT only affect data files */
|
||||
if (type != OS_LOG_FILE
|
||||
&& srv_unix_file_flush_method == SRV_UNIX_O_DIRECT) {
|
||||
# if 0
|
||||
fprintf(stderr, "Using O_DIRECT for file %s\n", name);
|
||||
# endif
|
||||
create_flag = create_flag | O_DIRECT;
|
||||
}
|
||||
#endif /* O_DIRECT */
|
||||
if (create_mode == OS_FILE_CREATE) {
|
||||
file = open(name, create_flag, os_innodb_umask);
|
||||
} else {
|
||||
file = open(name, create_flag);
|
||||
}
|
||||
|
||||
file = open(name, create_flag, os_innodb_umask);
|
||||
|
||||
if (file == -1) {
|
||||
*success = FALSE;
|
||||
|
@ -1330,11 +1336,24 @@ try_again:
|
|||
"create" : "open");
|
||||
if (retry) {
|
||||
goto try_again;
|
||||
} else {
|
||||
return(file /* -1 */);
|
||||
}
|
||||
}
|
||||
/* else */
|
||||
|
||||
*success = TRUE;
|
||||
|
||||
/* We disable OS caching (O_DIRECT) only on data files */
|
||||
if (type != OS_LOG_FILE
|
||||
&& srv_unix_file_flush_method == SRV_UNIX_O_DIRECT) {
|
||||
|
||||
os_file_set_nocache(file, name, mode_str);
|
||||
}
|
||||
|
||||
#ifdef USE_FILE_LOCK
|
||||
} else if (create_mode != OS_FILE_OPEN_RAW
|
||||
&& os_file_lock(file, name)) {
|
||||
*success = FALSE;
|
||||
if (create_mode != OS_FILE_OPEN_RAW && os_file_lock(file, name)) {
|
||||
|
||||
if (create_mode == OS_FILE_OPEN_RETRY) {
|
||||
int i;
|
||||
ut_print_timestamp(stderr);
|
||||
|
@ -1352,12 +1371,12 @@ try_again:
|
|||
fputs(" InnoDB: Unable to open the first data file\n",
|
||||
stderr);
|
||||
}
|
||||
|
||||
*success = FALSE;
|
||||
close(file);
|
||||
file = -1;
|
||||
#endif
|
||||
} else {
|
||||
*success = TRUE;
|
||||
}
|
||||
#endif /* USE_FILE_LOCK */
|
||||
|
||||
return(file);
|
||||
#endif /* __WIN__ */
|
||||
|
@ -1509,7 +1528,7 @@ os_file_rename(
|
|||
return(TRUE);
|
||||
}
|
||||
|
||||
os_file_handle_error(oldpath, "rename");
|
||||
os_file_handle_error_no_exit(oldpath, "rename");
|
||||
|
||||
return(FALSE);
|
||||
#else
|
||||
|
@ -1518,7 +1537,7 @@ os_file_rename(
|
|||
ret = rename((const char*)oldpath, (const char*)newpath);
|
||||
|
||||
if (ret != 0) {
|
||||
os_file_handle_error(oldpath, "rename");
|
||||
os_file_handle_error_no_exit(oldpath, "rename");
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
|
|
@ -1017,7 +1017,7 @@ YY_RULE_SETUP
|
|||
yylval = sym_tab_add_bound_lit(pars_sym_tab_global,
|
||||
yytext + 1, &type);
|
||||
|
||||
return(type);
|
||||
return((int) type);
|
||||
}
|
||||
YY_BREAK
|
||||
case 4:
|
||||
|
|
|
@ -109,7 +109,7 @@ BOUND_ID \$[a-z_A-Z0-9]+
|
|||
yylval = sym_tab_add_bound_lit(pars_sym_tab_global,
|
||||
yytext + 1, &type);
|
||||
|
||||
return(type);
|
||||
return((int) type);
|
||||
}
|
||||
|
||||
{BOUND_ID} {
|
||||
|
|
2
plug.in
2
plug.in
|
@ -30,6 +30,8 @@ MYSQL_PLUGIN_ACTIONS(innobase, [
|
|||
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";;
|
||||
osf*)
|
||||
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";;
|
||||
*solaris*|*SunOS*)
|
||||
CFLAGS="$CFLAGS -DUNIV_SOLARIS";;
|
||||
sysv5uw7*)
|
||||
# Problem when linking on SCO
|
||||
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";;
|
||||
|
|
|
@ -597,7 +597,7 @@ cmp_dtuple_rec_with_match(
|
|||
dtuple_byte = cmp_collate(dtuple_byte);
|
||||
}
|
||||
|
||||
ret = dtuple_byte - rec_byte;
|
||||
ret = (int) (dtuple_byte - rec_byte);
|
||||
if (UNIV_UNLIKELY(ret)) {
|
||||
if (ret < 0) {
|
||||
ret = -1;
|
||||
|
|
|
@ -3481,7 +3481,7 @@ row_delete_constraint_low(
|
|||
|
||||
pars_info_add_str_literal(info, "id", id);
|
||||
|
||||
return(que_eval_sql(info,
|
||||
return((int) que_eval_sql(info,
|
||||
"PROCEDURE DELETE_CONSTRAINT () IS\n"
|
||||
"BEGIN\n"
|
||||
"DELETE FROM SYS_FOREIGN_COLS WHERE ID = :id;\n"
|
||||
|
@ -3520,7 +3520,7 @@ row_delete_constraint(
|
|||
err = row_delete_constraint_low(id, trx);
|
||||
}
|
||||
|
||||
return(err);
|
||||
return((int) err);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
|
|
@ -2172,7 +2172,7 @@ row_fetch_store_uint4(
|
|||
ut_a(len == 4);
|
||||
|
||||
tmp = mach_read_from_4(dfield_get_data(dfield));
|
||||
*val = tmp;
|
||||
*val = (ib_uint32_t) tmp;
|
||||
|
||||
return(NULL);
|
||||
}
|
||||
|
|
|
@ -213,7 +213,7 @@ row_undo(
|
|||
ulint err;
|
||||
trx_t* trx;
|
||||
dulint roll_ptr;
|
||||
ibool froze_data_dict = FALSE;
|
||||
ibool locked_data_dict;
|
||||
|
||||
ut_ad(node && thr);
|
||||
|
||||
|
@ -266,13 +266,13 @@ row_undo(
|
|||
/* Prevent DROP TABLE etc. while we are rolling back this row.
|
||||
If we are doing a TABLE CREATE or some other dictionary operation,
|
||||
then we already have dict_operation_lock locked in x-mode. Do not
|
||||
try to lock again in s-mode, because that would cause a hang. */
|
||||
try to lock again, because that would cause a hang. */
|
||||
|
||||
if (trx->dict_operation_lock_mode == 0) {
|
||||
locked_data_dict = (trx->dict_operation_lock_mode == 0);
|
||||
|
||||
row_mysql_freeze_data_dictionary(trx);
|
||||
if (locked_data_dict) {
|
||||
|
||||
froze_data_dict = TRUE;
|
||||
row_mysql_lock_data_dictionary(trx);
|
||||
}
|
||||
|
||||
if (node->state == UNDO_NODE_INSERT) {
|
||||
|
@ -285,9 +285,9 @@ row_undo(
|
|||
err = row_undo_mod(node, thr);
|
||||
}
|
||||
|
||||
if (froze_data_dict) {
|
||||
if (locked_data_dict) {
|
||||
|
||||
row_mysql_unfreeze_data_dictionary(trx);
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
}
|
||||
|
||||
/* Do some cleanup */
|
||||
|
|
|
@ -314,6 +314,8 @@ ulint srv_fast_shutdown = 0;
|
|||
/* Generate a innodb_status.<pid> file */
|
||||
ibool srv_innodb_status = FALSE;
|
||||
|
||||
ibool srv_stats_on_metadata = TRUE;
|
||||
|
||||
ibool srv_use_doublewrite_buf = TRUE;
|
||||
ibool srv_use_checksums = TRUE;
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ rw_lock_create_func(
|
|||
lock->magic_n = RW_LOCK_MAGIC_N;
|
||||
|
||||
lock->cfile_name = cfile_name;
|
||||
lock->cline = cline;
|
||||
lock->cline = (unsigned int) cline;
|
||||
|
||||
lock->last_s_file_name = "not yet reserved";
|
||||
lock->last_x_file_name = "not yet reserved";
|
||||
|
@ -355,7 +355,7 @@ rw_lock_x_lock_low(
|
|||
file_name, line);
|
||||
#endif
|
||||
lock->last_x_file_name = file_name;
|
||||
lock->last_x_line = line;
|
||||
lock->last_x_line = (unsigned int) line;
|
||||
|
||||
/* Locking succeeded, we may return */
|
||||
return(RW_LOCK_EX);
|
||||
|
@ -392,7 +392,7 @@ rw_lock_x_lock_low(
|
|||
#endif
|
||||
|
||||
lock->last_x_file_name = file_name;
|
||||
lock->last_x_line = line;
|
||||
lock->last_x_line = (unsigned int) line;
|
||||
|
||||
/* Locking succeeded, we may return */
|
||||
return(RW_LOCK_EX);
|
||||
|
@ -414,7 +414,7 @@ rw_lock_x_lock_low(
|
|||
#endif
|
||||
|
||||
lock->last_x_file_name = file_name;
|
||||
lock->last_x_line = line;
|
||||
lock->last_x_line = (unsigned int) line;
|
||||
|
||||
/* Locking succeeded, we may return */
|
||||
return(RW_LOCK_EX);
|
||||
|
|
|
@ -221,7 +221,7 @@ trx_purge_sys_create(void)
|
|||
|
||||
purge_sys->trx = purge_sys->sess->trx;
|
||||
|
||||
purge_sys->trx->type = TRX_PURGE;
|
||||
purge_sys->trx->is_purge = 1;
|
||||
|
||||
ut_a(trx_start_low(purge_sys->trx, ULINT_UNDEFINED));
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ trx_create(
|
|||
|
||||
trx->op_info = "";
|
||||
|
||||
trx->type = TRX_USER;
|
||||
trx->is_purge = 0;
|
||||
trx->conc_state = TRX_NOT_STARTED;
|
||||
trx->start_time = time(NULL);
|
||||
|
||||
|
@ -667,7 +667,7 @@ trx_start_low(
|
|||
ut_ad(mutex_own(&kernel_mutex));
|
||||
ut_ad(trx->rseg == NULL);
|
||||
|
||||
if (trx->type == TRX_PURGE) {
|
||||
if (trx->is_purge) {
|
||||
trx->id = ut_dulint_zero;
|
||||
trx->conc_state = TRX_ACTIVE;
|
||||
trx->start_time = time(NULL);
|
||||
|
@ -1259,7 +1259,6 @@ trx_sig_send(
|
|||
UT_LIST_ADD_LAST(signals, trx->signals, sig);
|
||||
|
||||
sig->type = type;
|
||||
sig->state = TRX_SIG_WAITING;
|
||||
sig->sender = sender;
|
||||
sig->receiver = receiver_thr;
|
||||
|
||||
|
@ -1706,7 +1705,7 @@ trx_print(
|
|||
fputs(trx->op_info, f);
|
||||
}
|
||||
|
||||
if (trx->type != TRX_USER) {
|
||||
if (trx->is_purge) {
|
||||
fputs(" purge trx", f);
|
||||
}
|
||||
|
||||
|
@ -1979,7 +1978,7 @@ trx_recover_for_mysql(
|
|||
(ulong) count);
|
||||
}
|
||||
|
||||
return (count);
|
||||
return ((int) count);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
Loading…
Reference in a new issue