Commit 72aef9c2 authored by unknown's avatar unknown

Merge


include/violite.h:
  Auto merged
mysql-test/r/ps_7ndb.result:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_select.cc:
  Manual merge
parents 32ff7ade 633a2468
...@@ -144,8 +144,8 @@ int vio_close_shared_memory(Vio * vio); ...@@ -144,8 +144,8 @@ int vio_close_shared_memory(Vio * vio);
#if !defined(DONT_MAP_VIO) #if !defined(DONT_MAP_VIO)
#define vio_delete(vio) (vio)->viodelete(vio) #define vio_delete(vio) (vio)->viodelete(vio)
#define vio_errno(vio) (vio)->vioerrno(vio) #define vio_errno(vio) (vio)->vioerrno(vio)
#define vio_read(vio, buf, size) (vio)->read(vio,buf,size) #define vio_read(vio, buf, size) ((vio)->read)(vio,buf,size)
#define vio_write(vio, buf, size) (vio)->write(vio, buf, size) #define vio_write(vio, buf, size) ((vio)->write)(vio, buf, size)
#define vio_blocking(vio, set_blocking_mode, old_mode)\ #define vio_blocking(vio, set_blocking_mode, old_mode)\
(vio)->vioblocking(vio, set_blocking_mode, old_mode) (vio)->vioblocking(vio, set_blocking_mode, old_mode)
#define vio_is_blocking(vio) (vio)->is_blocking(vio) #define vio_is_blocking(vio) (vio)->is_blocking(vio)
......
drop table if exists t1; drop table if exists t1;
SET NAMES cp1251; SET NAMES cp1251;
create table t1 (a varchar(10) not null); create table t1 (a varchar(10) not null) character set cp1251;
insert into t1 values ("a"),("ab"),("abc"); insert into t1 values ("a"),("ab"),("abc");
select * from t1; select * from t1;
a a
...@@ -23,7 +23,7 @@ a ...@@ -23,7 +23,7 @@ a
b b
c c
drop table t1; drop table t1;
create table t1 (a char(15) binary, b binary(15)); create table t1 (a char(15) binary, b binary(15)) character set cp1251;
insert into t1 values ('aaa','bbb'),('AAA','BBB'); insert into t1 values ('aaa','bbb'),('AAA','BBB');
select upper(a),upper(b) from t1; select upper(a),upper(b) from t1;
upper(a) upper(b) upper(a) upper(b)
......
--default-character-set=cp1251 --new
...@@ -10,7 +10,7 @@ SET NAMES cp1251; ...@@ -10,7 +10,7 @@ SET NAMES cp1251;
# Test problem with LEFT() (Bug #514) # Test problem with LEFT() (Bug #514)
# #
create table t1 (a varchar(10) not null); create table t1 (a varchar(10) not null) character set cp1251;
insert into t1 values ("a"),("ab"),("abc"); insert into t1 values ("a"),("ab"),("abc");
select * from t1; select * from t1;
select a, left(a,1) as b from t1; select a, left(a,1) as b from t1;
...@@ -21,7 +21,7 @@ drop table t1; ...@@ -21,7 +21,7 @@ drop table t1;
# #
# Test of binary and upper/lower # Test of binary and upper/lower
# #
create table t1 (a char(15) binary, b binary(15)); create table t1 (a char(15) binary, b binary(15)) character set cp1251;
insert into t1 values ('aaa','bbb'),('AAA','BBB'); insert into t1 values ('aaa','bbb'),('AAA','BBB');
select upper(a),upper(b) from t1; select upper(a),upper(b) from t1;
select lower(a),lower(b) from t1; select lower(a),lower(b) from t1;
......
...@@ -4579,6 +4579,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv, ...@@ -4579,6 +4579,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
{ {
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
ulong db_access; ulong db_access;
bool db_is_pattern= test(want_access & GRANT_ACL);
#endif #endif
ulong dummy; ulong dummy;
DBUG_ENTER("check_access"); DBUG_ENTER("check_access");
...@@ -4610,9 +4611,8 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv, ...@@ -4610,9 +4611,8 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
*/ */
db_access= thd->db_access; db_access= thd->db_access;
if (!(thd->master_access & SELECT_ACL) && if (!(thd->master_access & SELECT_ACL) &&
(db && (!thd->db || strcmp(db,thd->db)))) (db && (!thd->db || db_is_pattern || strcmp(db,thd->db))))
db_access=acl_get(thd->host, thd->ip, db_access=acl_get(thd->host, thd->ip, thd->priv_user, db, db_is_pattern);
thd->priv_user, db, test(want_access & GRANT_ACL));
*save_priv=thd->master_access | db_access; *save_priv=thd->master_access | db_access;
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }
...@@ -4633,9 +4633,8 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv, ...@@ -4633,9 +4633,8 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
if (db == any_db) if (db == any_db)
DBUG_RETURN(FALSE); // Allow select on anything DBUG_RETURN(FALSE); // Allow select on anything
if (db && (!thd->db || strcmp(db,thd->db))) if (db && (!thd->db || db_is_pattern || strcmp(db,thd->db)))
db_access=acl_get(thd->host, thd->ip, db_access=acl_get(thd->host, thd->ip, thd->priv_user, db, db_is_pattern);
thd->priv_user, db, test(want_access & GRANT_ACL));
else else
db_access=thd->db_access; db_access=thd->db_access;
DBUG_PRINT("info",("db_access: %lu", db_access)); DBUG_PRINT("info",("db_access: %lu", db_access));
......
...@@ -7591,14 +7591,13 @@ const_expression_in_where(COND *cond, Item *comp_item, Item **const_item) ...@@ -7591,14 +7591,13 @@ const_expression_in_where(COND *cond, Item *comp_item, Item **const_item)
create_tmp_field_from_field() create_tmp_field_from_field()
thd Thread handler thd Thread handler
org_field field from which new field will be created org_field field from which new field will be created
item Item to create a field for name New field name
table Temporary table table Temporary table
modify_item 1 if item->result_field should point to new item. item !=NULL if item->result_field should point to new field.
This is relevent for how fill_record() is going to This is relevant for how fill_record() is going to work:
work: If item != NULL then fill_record() will update
If modify_item is 1 then fill_record() will update
the record in the original table. the record in the original table.
If modify_item is 0 then fill_record() will update If item == NULL then fill_record() will update
the temporary table the temporary table
convert_blob_length If >0 create a varstring(convert_blob_length) field convert_blob_length If >0 create a varstring(convert_blob_length) field
instead of blob. instead of blob.
...@@ -7609,9 +7608,8 @@ const_expression_in_where(COND *cond, Item *comp_item, Item **const_item) ...@@ -7609,9 +7608,8 @@ const_expression_in_where(COND *cond, Item *comp_item, Item **const_item)
*/ */
Field* create_tmp_field_from_field(THD *thd, Field* org_field, Field* create_tmp_field_from_field(THD *thd, Field* org_field,
Item *item, TABLE *table, const char *name, TABLE *table,
bool modify_item, Item_field *item, uint convert_blob_length)
uint convert_blob_length)
{ {
Field *new_field; Field *new_field;
...@@ -7624,10 +7622,10 @@ Field* create_tmp_field_from_field(THD *thd, Field* org_field, ...@@ -7624,10 +7622,10 @@ Field* create_tmp_field_from_field(THD *thd, Field* org_field,
new_field= org_field->new_field(thd->mem_root, table); new_field= org_field->new_field(thd->mem_root, table);
if (new_field) if (new_field)
{ {
if (modify_item) if (item)
((Item_field *)item)->result_field= new_field; item->result_field= new_field;
else else
new_field->field_name= item->name; new_field->field_name= name;
if (org_field->maybe_null()) if (org_field->maybe_null())
new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join
if (org_field->type() == MYSQL_TYPE_VAR_STRING || if (org_field->type() == MYSQL_TYPE_VAR_STRING ||
...@@ -7782,8 +7780,10 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, ...@@ -7782,8 +7780,10 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
case Item::DEFAULT_VALUE_ITEM: case Item::DEFAULT_VALUE_ITEM:
{ {
Item_field *field= (Item_field*) item; Item_field *field= (Item_field*) item;
return create_tmp_field_from_field(thd, (*from_field= field->field), item, return create_tmp_field_from_field(thd, (*from_field= field->field),
table, modify_item, convert_blob_length); item->name, table,
modify_item ? (Item_field*) item : NULL,
convert_blob_length);
} }
case Item::FUNC_ITEM: case Item::FUNC_ITEM:
case Item::COND_ITEM: case Item::COND_ITEM:
...@@ -7805,7 +7805,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, ...@@ -7805,7 +7805,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
{ {
Field *example= ((Item_type_holder *)item)->example(); Field *example= ((Item_type_holder *)item)->example();
if (example) if (example)
return create_tmp_field_from_field(thd, example, item, table, 0, return create_tmp_field_from_field(thd, example, item->name, table, NULL,
convert_blob_length); convert_blob_length);
return create_tmp_field_from_item(thd, item, table, copy_func, 0, return create_tmp_field_from_item(thd, item, table, copy_func, 0,
convert_blob_length); convert_blob_length);
......
...@@ -394,7 +394,7 @@ my_strtoll10: ...@@ -394,7 +394,7 @@ my_strtoll10:
popl %ebp popl %ebp
ret ret
my_strtoll10_end: .my_strtoll10_end:
.size my_strtoll10,.my_strtoll10_end-my_strtoll10 .size my_strtoll10,.my_strtoll10_end-my_strtoll10
.comm res,240,32 .comm res,240,32
.comm end_ptr,120,32 .comm end_ptr,120,32
......
...@@ -115,7 +115,7 @@ main(int argc, char** argv) ...@@ -115,7 +115,7 @@ main(int argc, char** argv)
{ {
/* child, therefore, client */ /* child, therefore, client */
char xbuf[100]; char xbuf[100];
int r = client_vio->read(client_vio,xbuf, sizeof(xbuf)); int r = vio_read(client_vio,xbuf, sizeof(xbuf));
if (r<=0) { if (r<=0) {
my_free((gptr)ssl_acceptor,MYF(0)); my_free((gptr)ssl_acceptor,MYF(0));
my_free((gptr)ssl_connector,MYF(0)); my_free((gptr)ssl_connector,MYF(0));
...@@ -130,7 +130,7 @@ main(int argc, char** argv) ...@@ -130,7 +130,7 @@ main(int argc, char** argv)
else else
{ {
const char* s = "Huhuhuh"; const char* s = "Huhuhuh";
int r = server_vio->write(server_vio,(gptr)s, strlen(s)); int r = vio_write(server_vio,(gptr)s, strlen(s));
if (r<=0) { if (r<=0) {
my_free((gptr)ssl_acceptor,MYF(0)); my_free((gptr)ssl_acceptor,MYF(0));
my_free((gptr)ssl_connector,MYF(0)); my_free((gptr)ssl_connector,MYF(0));
......
...@@ -77,13 +77,13 @@ main( int argc __attribute__((unused)), ...@@ -77,13 +77,13 @@ main( int argc __attribute__((unused)),
sa.sin_port = htons (1111); /* Server Port number */ sa.sin_port = htons (1111); /* Server Port number */
err = connect(client_vio->sd, (struct sockaddr*) &sa, err = connect(client_vio->sd, (struct sockaddr*) &sa,
sizeof(sa)); sizeof(sa));
/* ----------------------------------------------- */ /* ----------------------------------------------- */
/* Now we have TCP conncetion. Start SSL negotiation. */ /* Now we have TCP conncetion. Start SSL negotiation. */
read(client_vio->sd,xbuf, sizeof(xbuf)); read(client_vio->sd,xbuf, sizeof(xbuf));
sslconnect(ssl_connector,client_vio,60L); sslconnect(ssl_connector,client_vio,60L);
err = client_vio->read(client_vio,xbuf, sizeof(xbuf)); err = vio_read(client_vio,xbuf, sizeof(xbuf));
if (err<=0) { if (err<=0) {
my_free((gptr)ssl_connector,MYF(0)); my_free((gptr)ssl_connector,MYF(0));
fatal_error("client:SSL_read"); fatal_error("client:SSL_read");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment