From 02f007436f68a50945aa05f5b880b0bd2e7ab4d3 Mon Sep 17 00:00:00 2001 From: "monty@donna.mysql.fi" <> Date: Wed, 23 May 2001 23:47:08 +0300 Subject: Added Unique class to be used for duplicate removal in multi-table delete. --- sql/sql_class.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'sql/sql_class.h') diff --git a/sql/sql_class.h b/sql/sql_class.h index a67c0d13682..603e4bdeeb9 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -567,3 +567,32 @@ class user_var_entry Item_result type; }; +/* Class for unique (removing of duplicates) */ + +class Unique :public Sql_alloc +{ + DYNAMIC_ARRAY file_ptrs; + ulong max_elements, max_in_memory_size; + IO_CACHE file; + TREE tree; + char *record_pointers; + bool flush(); + +public: + ulong elements; + Unique(qsort_cmp2 comp_func, uint size, ulong max_in_memory_size_arg); + ~Unique(); + inline bool Unique::unique_add(gptr ptr) + { + if (tree.elements_in_tree > max_elements && flush()) + return 1; + return tree_insert(&tree,ptr,0); + } + + bool get(TABLE *table); + + friend int unique_write_to_file(gptr key, Unique *unique, + element_count count); + friend int unique_write_to_ptrs(gptr key, Unique *unique, + element_count count); +}; -- cgit v1.2.1