summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2006-06-30 19:15:18 +0300
committerunknown <monty@mysql.com>2006-06-30 19:15:18 +0300
commit9606675ba20eb309a1f402f92d06e2de8aed22d2 (patch)
tree15c1c844006e3cdc77167f5ef3986b9d40c16104
parentb138b55d1d72442482cac6f70450cb6ccf492b4b (diff)
parente0171231a58d5ada5e5f6e5db83617aab550f21d (diff)
downloadmariadb-git-9606675ba20eb309a1f402f92d06e2de8aed22d2.tar.gz
Merge mysql.com:/home/my/mysql-4.1
into mysql.com:/home/my/mysql-5.0 libmysql/libmysql.c: Auto merged mysql-test/mysql-test-run.sh: Auto merged mysql-test/t/key.test: Auto merged sql/table.cc: Auto merged mysql-test/r/key.result: Manual merge mysql-test/t/mysqldump.test: Manual merge (Now we have same code as in 4.1 and 5.1) sql/ha_ndbcluster.cc: Manual merge Change %ll -> llstr() tests/mysql_client_test.c: manual merge
-rw-r--r--heap/hp_test1.c2
-rw-r--r--libmysql/libmysql.c7
-rw-r--r--mysql-test/mysql-test-run.sh20
-rw-r--r--mysql-test/r/key.result10
-rw-r--r--mysql-test/t/key.test1
-rw-r--r--mysql-test/t/mysqldump.test2
-rw-r--r--sql/ha_ndbcluster.cc69
-rw-r--r--sql/table.cc21
-rw-r--r--tests/mysql_client_test.c71
9 files changed, 149 insertions, 54 deletions
diff --git a/heap/hp_test1.c b/heap/hp_test1.c
index 1efa97842c7..703b39b1e2d 100644
--- a/heap/hp_test1.c
+++ b/heap/hp_test1.c
@@ -59,7 +59,7 @@ int main(int argc, char **argv)
bzero((gptr) flags,sizeof(flags));
printf("- Creating heap-file\n");
- if (heap_create(filename,1,keyinfo,30,(ulong) flag*100000L,101L,
+ if (heap_create(filename,1,keyinfo,30,(ulong) flag*100000L,10L,
&hp_create_info) ||
!(file= heap_open(filename, 2)))
goto err;
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index c1e0703af10..a851d62b108 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -2391,10 +2391,9 @@ static void net_store_datetime(NET *net, MYSQL_TIME *tm)
static void store_param_date(NET *net, MYSQL_BIND *param)
{
- MYSQL_TIME *tm= (MYSQL_TIME *) param->buffer;
- tm->hour= tm->minute= tm->second= 0;
- tm->second_part= 0;
- net_store_datetime(net, tm);
+ MYSQL_TIME tm= *((MYSQL_TIME *) param->buffer);
+ tm.hour= tm.minute= tm.second= tm.second_part= 0;
+ net_store_datetime(net, &tm);
}
static void store_param_datetime(NET *net, MYSQL_BIND *param)
diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh
index bcdd8294eee..590885b3d46 100644
--- a/mysql-test/mysql-test-run.sh
+++ b/mysql-test/mysql-test-run.sh
@@ -1381,16 +1381,16 @@ start_master()
if [ x$DO_DDD = x1 ]
then
- $ECHO "set args $master_args" > $GDB_MASTER_INIT
+ $ECHO "set args $master_args" > $GDB_MASTER_INIT$1
manager_launch master ddd -display $DISPLAY --debugger \
- "gdb -x $GDB_MASTER_INIT" $MASTER_MYSQLD
+ "gdb -x $GDB_MASTER_INIT$1" $MASTER_MYSQLD
elif [ x$DO_GDB = x1 ]
then
if [ x$MANUAL_GDB = x1 ]
then
- $ECHO "set args $master_args" > $GDB_MASTER_INIT
+ $ECHO "set args $master_args" > $GDB_MASTER_INIT$1
$ECHO "To start gdb for the master , type in another window:"
- $ECHO "cd $CWD ; gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD"
+ $ECHO "cd $CWD ; gdb -x $GDB_MASTER_INIT$1 $MASTER_MYSQLD"
wait_for_master=1500
else
( $ECHO set args $master_args;
@@ -1402,9 +1402,9 @@ disa 1
end
r
EOF
- fi ) > $GDB_MASTER_INIT
+ fi ) > $GDB_MASTER_INIT$1
manager_launch master $XTERM -display $DISPLAY \
- -title "Master" -e gdb -x $GDB_MASTER_INIT $MASTER_MYSQLD
+ -title "Master" -e gdb -x $GDB_MASTER_INIT$1 $MASTER_MYSQLD
fi
else
manager_launch master $MASTER_MYSQLD $master_args
@@ -2088,13 +2088,7 @@ then
fi
start_manager
-
-# Do not automagically start daemons if we are in gdb or running only one test
-# case
- if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
- then
- mysql_start
- fi
+ mysql_start
$ECHO "Loading Standard Test Databases"
mysql_loadstd
fi
diff --git a/mysql-test/r/key.result b/mysql-test/r/key.result
index a6f05143b3e..6a362d6b86a 100644
--- a/mysql-test/r/key.result
+++ b/mysql-test/r/key.result
@@ -336,8 +336,16 @@ UNIQUE i1idx (i1),
UNIQUE i2idx (i2));
desc t1;
Field Type Null Key Default Extra
-i1 int(11) NO UNI
+i1 int(11) NO PRI
i2 int(11) NO UNI
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `i1` int(11) NOT NULL default '0',
+ `i2` int(11) NOT NULL default '0',
+ UNIQUE KEY `i1idx` (`i1`),
+ UNIQUE KEY `i2idx` (`i2`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 (
c1 int,
diff --git a/mysql-test/t/key.test b/mysql-test/t/key.test
index e7072ae29f6..3767f5f885e 100644
--- a/mysql-test/t/key.test
+++ b/mysql-test/t/key.test
@@ -334,6 +334,7 @@ create table t1 (
UNIQUE i1idx (i1),
UNIQUE i2idx (i2));
desc t1;
+show create table t1;
drop table t1;
#
diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test
index 7e4fedb297d..a091242171e 100644
--- a/mysql-test/t/mysqldump.test
+++ b/mysql-test/t/mysqldump.test
@@ -610,7 +610,7 @@ drop database db1;
# BUG#15328 Segmentation fault occured if my.cnf is invalid for escape sequence
#
---exec $MYSQL_MY_PRINT_DEFAULTS --config-file=$MYSQL_TEST_DIR/std_data/bug15328.cnf mysqldump
+--exec $MYSQL_MY_PRINT_DEFAULTS --defaults-file=$MYSQL_TEST_DIR/std_data/bug15328.cnf mysqldump
#
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index b36099cf25c..c5711d8f0fd 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -2254,9 +2254,10 @@ int ha_ndbcluster::write_row(byte *record)
{
Ndb *ndb= get_ndb();
Uint64 next_val= (Uint64) table->next_number_field->val_int() + 1;
+ char buff[22];
DBUG_PRINT("info",
- ("Trying to set next auto increment value to %llu",
- (ulonglong) next_val));
+ ("Trying to set next auto increment value to %s",
+ llstr(next_val, buff)));
if (ndb->setAutoIncrementValue((const NDBTAB *) m_table, next_val, TRUE)
== -1)
ERR_RETURN(ndb->getNdbError());
@@ -2582,13 +2583,15 @@ void ha_ndbcluster::unpack_record(byte* buf)
{
// Table with hidden primary key
int hidden_no= table->s->fields;
+ char buff[22];
const NDBTAB *tab= (const NDBTAB *) m_table;
const NDBCOL *hidden_col= tab->getColumn(hidden_no);
const NdbRecAttr* rec= m_value[hidden_no].rec;
DBUG_ASSERT(rec);
- DBUG_PRINT("hidden", ("%d: %s \"%llu\"", hidden_no,
- hidden_col->getName(), rec->u_64_value()));
- }
+ DBUG_PRINT("hidden", ("%d: %s \"%s\"", hidden_no,
+ hidden_col->getName(),
+ llstr(rec->u_64_value(), buff)));
+ }
print_results();
#endif
DBUG_VOID_RETURN;
@@ -4101,10 +4104,11 @@ static int create_ndb_column(NDBCOL &col,
// Set autoincrement
if (field->flags & AUTO_INCREMENT_FLAG)
{
+ char buff[22];
col.setAutoIncrement(TRUE);
ulonglong value= info->auto_increment_value ?
info->auto_increment_value : (ulonglong) 1;
- DBUG_PRINT("info", ("Autoincrement key, initial: %llu", value));
+ DBUG_PRINT("info", ("Autoincrement key, initial: %s", llstr(value, buff)));
col.setAutoIncrementInitialValue(value);
}
else
@@ -5493,8 +5497,9 @@ uint ndb_get_commitcount(THD *thd, char *dbname, char *tabname,
if (share->commit_count != 0)
{
*commit_count= share->commit_count;
- DBUG_PRINT("info", ("Getting commit_count: %llu from share",
- share->commit_count));
+ char buff[22];
+ DBUG_PRINT("info", ("Getting commit_count: %s from share",
+ llstr(share->commit_count, buff)));
pthread_mutex_unlock(&share->mutex);
free_share(share);
DBUG_RETURN(0);
@@ -5518,7 +5523,9 @@ uint ndb_get_commitcount(THD *thd, char *dbname, char *tabname,
pthread_mutex_lock(&share->mutex);
if (share->commit_count_lock == lock)
{
- DBUG_PRINT("info", ("Setting commit_count to %llu", stat.commit_count));
+ char buff[22];
+ DBUG_PRINT("info", ("Setting commit_count to %s",
+ llstr(stat.commit_count, buff)));
share->commit_count= stat.commit_count;
*commit_count= stat.commit_count;
}
@@ -5568,13 +5575,12 @@ ndbcluster_cache_retrieval_allowed(THD *thd,
char *full_name, uint full_name_len,
ulonglong *engine_data)
{
- DBUG_ENTER("ndbcluster_cache_retrieval_allowed");
-
Uint64 commit_count;
bool is_autocommit= !(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN));
char *dbname= full_name;
char *tabname= dbname+strlen(dbname)+1;
-
+ char buff[22], buff2[22];
+ DBUG_ENTER("ndbcluster_cache_retrieval_allowed");
DBUG_PRINT("enter", ("dbname: %s, tabname: %s, is_autocommit: %d",
dbname, tabname, is_autocommit));
@@ -5590,8 +5596,8 @@ ndbcluster_cache_retrieval_allowed(THD *thd,
DBUG_PRINT("exit", ("No, could not retrieve commit_count"));
DBUG_RETURN(FALSE);
}
- DBUG_PRINT("info", ("*engine_data: %llu, commit_count: %llu",
- *engine_data, commit_count));
+ DBUG_PRINT("info", ("*engine_data: %s, commit_count: %s",
+ llstr(*engine_data, buff), llstr(commit_count, buff2)));
if (commit_count == 0)
{
*engine_data= 0; /* invalidate */
@@ -5605,7 +5611,8 @@ ndbcluster_cache_retrieval_allowed(THD *thd,
DBUG_RETURN(FALSE);
}
- DBUG_PRINT("exit", ("OK to use cache, engine_data: %llu", *engine_data));
+ DBUG_PRINT("exit", ("OK to use cache, engine_data: %s",
+ llstr(*engine_data, buff)));
DBUG_RETURN(TRUE);
}
@@ -5638,10 +5645,10 @@ ha_ndbcluster::register_query_cache_table(THD *thd,
qc_engine_callback *engine_callback,
ulonglong *engine_data)
{
- DBUG_ENTER("ha_ndbcluster::register_query_cache_table");
-
+ Uint64 commit_count;
+ char buff[22];
bool is_autocommit= !(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN));
-
+ DBUG_ENTER("ha_ndbcluster::register_query_cache_table");
DBUG_PRINT("enter",("dbname: %s, tabname: %s, is_autocommit: %d",
m_dbname, m_tabname, is_autocommit));
@@ -5651,7 +5658,6 @@ ha_ndbcluster::register_query_cache_table(THD *thd,
DBUG_RETURN(FALSE);
}
- Uint64 commit_count;
if (ndb_get_commitcount(thd, m_dbname, m_tabname, &commit_count))
{
*engine_data= 0;
@@ -5660,7 +5666,7 @@ ha_ndbcluster::register_query_cache_table(THD *thd,
}
*engine_data= commit_count;
*engine_callback= ndbcluster_cache_retrieval_allowed;
- DBUG_PRINT("exit", ("commit_count: %llu", commit_count));
+ DBUG_PRINT("exit", ("commit_count: %s", llstr(commit_count, buff)));
DBUG_RETURN(commit_count > 0);
}
@@ -5841,12 +5847,13 @@ int
ndb_get_table_statistics(Ndb* ndb, const char * table,
struct Ndb_statistics * ndbstat)
{
- DBUG_ENTER("ndb_get_table_statistics");
- DBUG_PRINT("enter", ("table: %s", table));
NdbTransaction* pTrans;
NdbError error;
int retries= 10;
int retry_sleep= 30 * 1000; /* 30 milliseconds */
+ char buff[22], buff2[22], buff3[22], buff4[22];
+ DBUG_ENTER("ndb_get_table_statistics");
+ DBUG_PRINT("enter", ("table: %s", table));
do
{
@@ -5923,10 +5930,13 @@ ndb_get_table_statistics(Ndb* ndb, const char * table,
ndbstat->row_size= sum_row_size;
ndbstat->fragment_memory= sum_mem;
- DBUG_PRINT("exit", ("records: %llu commits: %llu "
- "row_size: %llu mem: %llu count: %u",
- sum_rows, sum_commits, sum_row_size,
- sum_mem, count));
+ DBUG_PRINT("exit", ("records: %s commits: %s "
+ "row_size: %s mem: %s count: %u",
+ llstr(sum_rows, buff),
+ llstr(sum_commits, buff2),
+ llstr(sum_row_size, buff3),
+ llstr(sum_mem, buff4),
+ count));
DBUG_RETURN(0);
retry:
@@ -6461,9 +6471,12 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
if (ndb_get_table_statistics(ndb, tabname, &stat) == 0)
{
+ char buff[22], buff2[22];
DBUG_PRINT("ndb_util_thread",
- ("Table: %s, commit_count: %llu, rows: %llu",
- share->table_name, stat.commit_count, stat.row_count));
+ ("Table: %s commit_count: %s rows: %s",
+ share->table_name,
+ llstr(stat.commit_count, buff),
+ llstr(stat.row_count, buff2));
}
else
{
diff --git a/sql/table.cc b/sql/table.cc
index 9ec9463c33c..cfdb9bd93aa 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -678,6 +678,27 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
if (outparam->key_info[key].flags & HA_FULLTEXT)
outparam->key_info[key].algorithm= HA_KEY_ALG_FULLTEXT;
+ if (primary_key >= MAX_KEY && (keyinfo->flags & HA_NOSAME))
+ {
+ /*
+ If the UNIQUE key doesn't have NULL columns and is not a part key
+ declare this as a primary key.
+ */
+ primary_key=key;
+ for (i=0 ; i < keyinfo->key_parts ;i++)
+ {
+ uint fieldnr= key_part[i].fieldnr;
+ if (!fieldnr ||
+ outparam->field[fieldnr-1]->null_ptr ||
+ outparam->field[fieldnr-1]->key_length() !=
+ key_part[i].length)
+ {
+ primary_key=MAX_KEY; // Can't be used
+ break;
+ }
+ }
+ }
+
for (i=0 ; i < keyinfo->key_parts ; key_part++,i++)
{
if (new_field_pack_flag <= 1)
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 3876de58b0e..0b3928e400b 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -14882,11 +14882,13 @@ static void test_bug17667()
printf("success. All queries found intact in the log.\n");
- } else {
+ }
+ else
+ {
fprintf(stderr, "Could not find the log file, var/log/master.log, so "
- "test_bug17667 is \ninconclusive. Run test from the "
- "mysql-test/mysql-test-run* program \nto set up the correct "
- "environment for this test.\n\n");
+ "test_bug17667 is \ninconclusive. Run test from the "
+ "mysql-test/mysql-test-run* program \nto set up the correct "
+ "environment for this test.\n\n");
}
if (log_file != NULL)
@@ -14896,7 +14898,8 @@ static void test_bug17667()
/*
- Bug#14169: type of group_concat() result changed to blob if tmp_table was used
+ Bug#14169: type of group_concat() result changed to blob if tmp_table was
+ used
*/
static void test_bug14169()
{
@@ -14929,7 +14932,62 @@ static void test_bug14169()
rc= mysql_query(mysql, "drop table t1");
myquery(rc);
-}/*
+}
+
+
+/*
+ Bug#20152: mysql_stmt_execute() writes to MYSQL_TYPE_DATE buffer
+*/
+
+static void test_bug20152()
+{
+ MYSQL_BIND bind[1];
+ MYSQL_STMT *stmt;
+ MYSQL_TIME tm;
+ int rc;
+ const char *query= "INSERT INTO t1 (f1) VALUES (?)";
+
+ myheader("test_bug20152");
+
+ memset(bind, 0, sizeof(bind));
+ bind[0].buffer_type= MYSQL_TYPE_DATE;
+ bind[0].buffer= (void*)&tm;
+
+ tm.year = 2006;
+ tm.month = 6;
+ tm.day = 18;
+ tm.hour = 14;
+ tm.minute = 9;
+ tm.second = 42;
+
+ rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
+ myquery(rc);
+ rc= mysql_query(mysql, "CREATE TABLE t1 (f1 DATE)");
+ myquery(rc);
+
+ stmt= mysql_stmt_init(mysql);
+ rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ check_execute(stmt, rc);
+ rc= mysql_stmt_bind_param(stmt, bind);
+ check_execute(stmt, rc);
+ rc= mysql_stmt_execute(stmt);
+ check_execute(stmt, rc);
+ rc= mysql_stmt_close(stmt);
+ check_execute(stmt, rc);
+ rc= mysql_query(mysql, "DROP TABLE t1");
+ myquery(rc);
+
+ if (tm.hour == 14 && tm.minute == 9 && tm.second == 42) {
+ if (!opt_silent)
+ printf("OK!");
+ } else {
+ printf("[14:09:42] != [%02d:%02d:%02d]\n", tm.hour, tm.minute, tm.second);
+ DIE_UNLESS(0==1);
+ }
+}
+
+
+/*
Read and parse arguments and MySQL options from my.cnf
*/
@@ -15193,6 +15251,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug12744", test_bug12744 },
{ "test_bug16143", test_bug16143 },
{ "test_bug15613", test_bug15613 },
+ { "test_bug20152", test_bug20152 },
{ "test_bug14169", test_bug14169 },
{ "test_bug17667", test_bug17667 },
{ 0, 0 }