From 7a99669fbcf534d7e4fa869c4d729f21bc625b1b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 30 May 2003 15:22:34 +0500 Subject: Moved spatial functions to the sql/item_geofunc.cc file. BitKeeper/etc/ignore: Added libmysqld/item_geofunc.cc to the ignore list --- sql/item.h | 1 + 1 file changed, 1 insertion(+) (limited to 'sql/item.h') diff --git a/sql/item.h b/sql/item.h index 470937f8ee7..2d285bbe434 100644 --- a/sql/item.h +++ b/sql/item.h @@ -644,6 +644,7 @@ public: #include "item_row.h" #include "item_cmpfunc.h" #include "item_strfunc.h" +#include "item_geofunc.h" #include "item_timefunc.h" #include "item_uniq.h" #include "item_subselect.h" -- cgit v1.2.1 From b388eb004df7112b2ae0986457fc9d01131b71ea Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 4 Jun 2003 18:28:51 +0300 Subject: Added SQLSTATE to client/server protocol bmove_allign -> bmove_align Added OLAP function ROLLUP Split mysql_fix_privilege_tables to a script and a .sql data file Added new (MEMROOT*) functions to avoid calling current_thd() when creating some common objects. Added table_alias_charset, for easier --lower-case-table-name handling Better SQL_MODE handling (Setting complex options also sets sub options) New (faster) assembler string functions for x86 BitKeeper/etc/ignore: added libmysqld/sql_state.c client/mysql.cc: Added SQLSTATE to error messages Added new function put_error() to be able to clean up some old code. client/mysqltest.c: Write ERROR SQLSTATE for all errors dbug/dbug.c: Portability fixes include/m_string.h: Rename bmove_allign as bmove_align include/mysql.h: Added SQLSTATE (for embedded version) include/mysql_com.h: Send correct SQLSTATE for the error to the client libmysql/libmysql.c: Changed default error state to HY000 Applied code cleanup patch libmysqld/Makefile.am: Added sql_state.cc libmysqld/libmysqld.c: Added sqlstate mysql-test/r/analyse.result: Updated results mysql-test/r/ansi.result: Updated results mysql-test/r/auto_increment.result: Updated results mysql-test/r/bdb-deadlock.result: Updated results mysql-test/r/bdb.result: Updated results mysql-test/r/comments.result: Updated results mysql-test/r/create.result: Updated results mysql-test/r/ctype_collate.result: Updated results mysql-test/r/delayed.result: Updated results mysql-test/r/delete.result: Updated results mysql-test/r/derived.result: Updated results mysql-test/r/distinct.result: Updated results mysql-test/r/drop.result: Updated results mysql-test/r/err000001.result: Updated results mysql-test/r/explain.result: Updated results mysql-test/r/flush.result: Updated results mysql-test/r/fulltext.result: Updated results mysql-test/r/func_gconcat.result: Updated results mysql-test/r/func_system.result: Updated results mysql-test/r/grant_cache.result: Updated results mysql-test/r/group_by.result: Updated results mysql-test/r/handler.result: Updated results mysql-test/r/heap.result: Updated results mysql-test/r/heap_btree.result: Updated results mysql-test/r/heap_hash.result: Updated results mysql-test/r/innodb.result: Updated results mysql-test/r/innodb_handler.result: Updated results mysql-test/r/insert_select.result: Updated results mysql-test/r/insert_update.result: Updated results mysql-test/r/join.result: Updated results mysql-test/r/join_outer.result: Updated results mysql-test/r/key.result: Updated results mysql-test/r/lock.result: Updated results mysql-test/r/lock_multi.result: Updated results mysql-test/r/merge.result: Updated results mysql-test/r/multi_update.result: Updated results mysql-test/r/myisam.result: Updated results mysql-test/r/null.result: Updated results mysql-test/r/olap.result: Updated results mysql-test/r/order_by.result: Updated results mysql-test/r/packet.result: Updated results mysql-test/r/query_cache.result: Updated results mysql-test/r/row.result: Updated results mysql-test/r/rpl000001.result: Updated results mysql-test/r/rpl000009.result: Updated results mysql-test/r/rpl_empty_master_crash.result: Updated results mysql-test/r/rpl_log.result: Updated results mysql-test/r/rpl_replicate_do.result: Updated results mysql-test/r/rpl_rotate_logs.result: Updated results mysql-test/r/select.result: Updated results mysql-test/r/select_safe.result: Updated results mysql-test/r/show_check.result: Updated results mysql-test/r/sql_mode.result: Updated results mysql-test/r/subselect.result: Updated results mysql-test/r/temp_table.result: Updated results mysql-test/r/truncate.result: Updated results mysql-test/r/type_blob.result: Updated results mysql-test/r/type_decimal.result: Updated results mysql-test/r/type_float.result: Updated results mysql-test/r/type_ranges.result: Updated results mysql-test/r/union.result: Updated results mysql-test/r/update.result: Updated results mysql-test/r/user_var.result: Updated results mysql-test/r/varbinary.result: Updated results mysql-test/r/variables.result: Updated results mysql-test/t/ansi.test: Test of sql_mode mysql-test/t/derived.test: Updated results mysql-test/t/func_system.test: Make this independen of the MySQL server name mysql-test/t/lowercase_table.test: Cleanup mysql-test/t/olap.test: A lot of new tests mysql-test/t/sql_mode.test: More test for sql_mode mysql-test/t/subselect.test: Added a few new tests (to find a bug in the item_ref code) scripts/Makefile.am: Added mysql_fix_privilege_tables.sql scripts/mysql_fix_privilege_tables.sh: Totally new script. This bascily just pipes mysql_fix_privilege_tables.sql through 'mysql' to 'mysqld' sql/Makefile.am: Added sql_state.cc sql/item.cc: Extended Item_field::eq() to be able to better match GROUP BY fields on the command line. Needed for ROLLUP sql/item.h: Added function to be able to avoid calling current_thd() when doing new Item. sql/item_sum.cc: Moved copy_or_same() and some reset() functions from item_sum.h Needed to be able to access thd->mem_root. sql/item_sum.h: Moved some functions to item_sum.cc Added make_unique() for ROLLUP sql/item_uniq.h: Fixed return value sql/mysql_priv.h: Updated MODE flags sql/mysqld.cc: Added ANSI as it's own mode Moved charset_info variables here Cleaned up handler_count handling (for NT) Added table_alias_charset, for easier --lower-case-table-name handling sql/net_serv.cc: New comment sql/protocol.cc: Send SQLSTATE to client sql/set_var.cc: Better SQL_MODE handling (Setting complex options also sets sub options) sql/set_var.h: Better SQL_MODE handling sql/sql_base.cc: Make alias depend on --lower-case-table-names Make find_item_in_list also check database name sql/sql_cache.cc: Indentation cleanup sql/sql_list.h: Added safety assert Addes support of alloc without current_thd() sql/sql_prepare.cc: Update after prototype change sql/sql_select.cc: Added ROLLUP sql/sql_select.h: structures for rollup sql/sql_show.cc: Easier SQL_MODE handling sql/sql_string.cc: Move CHARSET_INFO to mysqld (to be together with all other global variables) sql/sql_string.h: Added function to be able to avoid calling current_thd() when doing new Item. sql/sql_table.cc: Simpler --lower-case-table-name handling sql/sql_union.cc: Update after prototype change sql/sql_yacc.yy: ROLLUP sql/unireg.h: bmove_allign ->bmove_align strings/Makefile.am: Fix to be able to compile str_test.c strings/ctype.c: Removed empty lines strings/str_test.c: Added test of bmove_align strings/strings-x86.s: Faster bmove_align, bmove_upp and strmake strings/strings.asm: move_allg --- sql/item.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'sql/item.h') diff --git a/sql/item.h b/sql/item.h index 470937f8ee7..934ea83d218 100644 --- a/sql/item.h +++ b/sql/item.h @@ -29,6 +29,8 @@ class Item { void operator=(Item &); public: static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); } + static void *operator new(size_t size, MEM_ROOT *mem_root) + { return (void*) alloc_root(mem_root, (uint) size); } static void operator delete(void *ptr,size_t size) {} /*lint -e715 */ enum Type {FIELD_ITEM, FUNC_ITEM, SUM_FUNC_ITEM, STRING_ITEM, -- cgit v1.2.1 From 4c1766ddee7216a540ec35f691b41825492d55db Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 24 Jun 2003 13:37:11 +0500 Subject: Item character set is stored in Item itself now, not in ITem->str_value --- sql/item.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'sql/item.h') diff --git a/sql/item.h b/sql/item.h index 5cfe8eb3907..df9ada72ce5 100644 --- a/sql/item.h +++ b/sql/item.h @@ -65,6 +65,7 @@ public: my_bool unsigned_flag; my_bool with_sum_func; my_bool fixed; /* If item fixed with fix_fields */ + CHARSET_INFO *collation; /* character set && collation */ enum coercion coercibility; /* Precedence order of collation */ // alloc & destruct is done as start of select using sql_alloc @@ -123,18 +124,17 @@ public: virtual Item *real_item() { return this; } virtual Item *get_tmp_table_item(THD *thd) { return copy_or_same(thd); } - virtual bool binary() const - { return str_value.charset()->state & MY_CS_BINSORT ? 1 : 0 ; } CHARSET_INFO *default_charset() const; - CHARSET_INFO *charset() const { return str_value.charset(); }; - void set_charset(CHARSET_INFO *cs) { str_value.set_charset(cs); } + CHARSET_INFO *charset() const { return collation; }; + void set_charset(CHARSET_INFO *cs) + { collation= cs; } void set_charset(CHARSET_INFO *cs, enum coercion coer) - { - str_value.set_charset(cs); - coercibility= coer; - } + { collation= cs; coercibility= coer; } bool set_charset(CHARSET_INFO *cs1, enum coercion co1, CHARSET_INFO *cs2, enum coercion co2); + bool binary() const + { return charset()->state & MY_CS_BINSORT ? 1 : 0 ; } + virtual void set_outer_resolving() {} // Row emulation @@ -383,6 +383,7 @@ public: Item_string(const char *str,uint length, CHARSET_INFO *cs, enum coercion coer= COER_COERCIBLE) { + set_charset(cs); str_value.set(str,length,cs); coercibility= coer; max_length=length; @@ -392,6 +393,7 @@ public: Item_string(const char *name_par, const char *str, uint length, CHARSET_INFO *cs, enum coercion coer= COER_COERCIBLE) { + set_charset(cs); str_value.set(str,length,cs); coercibility= coer; max_length=length; -- cgit v1.2.1 From 64d7734f3827ea28f6463978cde5a97de212dcf9 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 24 Jun 2003 15:11:07 +0500 Subject: New class DTCollation (SQL:2003 calls it "declared type collation") It's a combination of collation and its derivation (precedence order) --- sql/item.h | 109 +++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 80 insertions(+), 29 deletions(-) (limited to 'sql/item.h') diff --git a/sql/item.h b/sql/item.h index df9ada72ce5..ce79e70e5d6 100644 --- a/sql/item.h +++ b/sql/item.h @@ -23,6 +23,63 @@ class Protocol; struct st_table_list; void item_init(void); /* Init item functions */ + +/* + "Declared Type Collation" + A combination of collation and its deriviation. +*/ + +enum Derivation +{ + DERIVATION_COERCIBLE= 3, + DERIVATION_IMPLICIT= 2, + DERIVATION_NONE= 1, + DERIVATION_EXPLICIT= 0 +}; + +class DTCollation { +public: + CHARSET_INFO *collation; + enum Derivation derivation; + + DTCollation() + { + collation= &my_charset_bin; + derivation= DERIVATION_NONE; + } + DTCollation(CHARSET_INFO *collation_arg, Derivation derivation_arg) + { + collation= collation_arg; + derivation= derivation_arg; + } + void set(DTCollation *dt) + { + collation= dt->collation; + derivation= dt->derivation; + } + void set(CHARSET_INFO *collation_arg, Derivation derivation_arg) + { + collation= collation_arg; + derivation= derivation_arg; + } + void set(CHARSET_INFO *collation_arg) + { collation= collation_arg; } + void set(Derivation derivation_arg) + { derivation= derivation_arg; } + bool aggregate(DTCollation *dt); + const char *derivation_name() const + { + switch(derivation) + { + case DERIVATION_COERCIBLE: return "COERCIBLE"; + case DERIVATION_IMPLICIT: return "IMPLICIT"; + case DERIVATION_EXPLICIT: return "EXPLICIT"; + case DERIVATION_NONE: return "NONE"; + default: return "UNKNOWN"; + } + } +}; + class Item { uint loop_id; /* Used to find selfrefering loops */ Item(const Item &); /* Prevent use of these */ @@ -41,19 +98,6 @@ public: SUBSELECT_ITEM, ROW_ITEM, CACHE_ITEM}; enum cond_result { COND_UNDEF,COND_OK,COND_TRUE,COND_FALSE }; - enum coercion { COER_COERCIBLE=3, COER_IMPLICIT=2, - COER_NOCOLL=1, COER_EXPLICIT=0 }; - const char *coercion_name(enum coercion coer) const - { - switch(coer) - { - case COER_COERCIBLE: return "COERCIBLE"; - case COER_IMPLICIT: return "IMPLICIT"; - case COER_EXPLICIT: return "EXPLICIT"; - case COER_NOCOLL: return "NO COLLATION"; - default: return "UNKNOWN"; - } - } String str_value; /* used to store value */ my_string name; /* Name from select */ @@ -65,9 +109,8 @@ public: my_bool unsigned_flag; my_bool with_sum_func; my_bool fixed; /* If item fixed with fix_fields */ - CHARSET_INFO *collation; /* character set && collation */ - enum coercion coercibility; /* Precedence order of collation */ - + DTCollation collation; + // alloc & destruct is done as start of select using sql_alloc Item(); /* @@ -125,13 +168,23 @@ public: virtual Item *get_tmp_table_item(THD *thd) { return copy_or_same(thd); } CHARSET_INFO *default_charset() const; - CHARSET_INFO *charset() const { return collation; }; + Derivation derivation() const { return collation.derivation; } + CHARSET_INFO *charset() const { return collation.collation; } void set_charset(CHARSET_INFO *cs) - { collation= cs; } - void set_charset(CHARSET_INFO *cs, enum coercion coer) - { collation= cs; coercibility= coer; } - bool set_charset(CHARSET_INFO *cs1, enum coercion co1, - CHARSET_INFO *cs2, enum coercion co2); + { collation.collation= cs; } + void set_charset(Derivation dv) + { collation.derivation= dv; } + void set_charset(CHARSET_INFO *cs, Derivation dv) + { collation.collation= cs; collation.derivation= dv; } + void set_charset(Item &item) + { collation= item.collation; } + void set_charset(DTCollation *collation_arg) + { + collation.collation= collation_arg->collation; + collation.derivation= collation_arg->derivation; + } + bool set_charset(CHARSET_INFO *cs1, Derivation dv1, + CHARSET_INFO *cs2, Derivation dv2); bool binary() const { return charset()->state & MY_CS_BINSORT ? 1 : 0 ; } @@ -180,7 +233,7 @@ public: Item_field(const char *db_par,const char *table_name_par, const char *field_name_par) :Item_ident(db_par,table_name_par,field_name_par),field(0),result_field(0) - { coercibility= COER_IMPLICIT; } + { set_charset(DERIVATION_IMPLICIT); } // Constructor need to process subselect with temporary tables (see Item) Item_field(THD *thd, Item_field &item); Item_field(Field *field); @@ -381,21 +434,19 @@ class Item_string :public Item { public: Item_string(const char *str,uint length, - CHARSET_INFO *cs, enum coercion coer= COER_COERCIBLE) + CHARSET_INFO *cs, Derivation dv= DERIVATION_COERCIBLE) { - set_charset(cs); + set_charset(cs, dv); str_value.set(str,length,cs); - coercibility= coer; max_length=length; set_name(str, length, cs); decimals=NOT_FIXED_DEC; } Item_string(const char *name_par, const char *str, uint length, - CHARSET_INFO *cs, enum coercion coer= COER_COERCIBLE) + CHARSET_INFO *cs, Derivation dv= DERIVATION_COERCIBLE) { - set_charset(cs); + set_charset(cs, dv); str_value.set(str,length,cs); - coercibility= coer; max_length=length; set_name(name_par,0,cs); decimals=NOT_FIXED_DEC; -- cgit v1.2.1 From 3eaf8865ecdb8db3e5bc7c1b59716dfcff79dc92 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 24 Jun 2003 17:12:07 +0500 Subject: String comparison functions now use the same DTCollation with CONCAT() and other string functions. This allows to reuse a lot if code and to simplify further development. --- sql/item.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'sql/item.h') diff --git a/sql/item.h b/sql/item.h index ce79e70e5d6..e80648b89de 100644 --- a/sql/item.h +++ b/sql/item.h @@ -52,10 +52,10 @@ public: collation= collation_arg; derivation= derivation_arg; } - void set(DTCollation *dt) + void set(DTCollation &dt) { - collation= dt->collation; - derivation= dt->derivation; + collation= dt.collation; + derivation= dt.derivation; } void set(CHARSET_INFO *collation_arg, Derivation derivation_arg) { @@ -66,7 +66,9 @@ public: { collation= collation_arg; } void set(Derivation derivation_arg) { derivation= derivation_arg; } - bool aggregate(DTCollation *dt); + bool aggregate(DTCollation &dt); + bool set(DTCollation &dt1, DTCollation &dt2) + { set(dt1); return aggregate(dt2); } const char *derivation_name() const { switch(derivation) @@ -183,8 +185,6 @@ public: collation.collation= collation_arg->collation; collation.derivation= collation_arg->derivation; } - bool set_charset(CHARSET_INFO *cs1, Derivation dv1, - CHARSET_INFO *cs2, Derivation dv2); bool binary() const { return charset()->state & MY_CS_BINSORT ? 1 : 0 ; } -- cgit v1.2.1