summaryrefslogtreecommitdiff
path: root/sql/sql_class.h
diff options
context:
space:
mode:
authormonty@donna.mysql.fi <>2001-05-23 23:47:08 +0300
committermonty@donna.mysql.fi <>2001-05-23 23:47:08 +0300
commit02f007436f68a50945aa05f5b880b0bd2e7ab4d3 (patch)
treed871d522f4bdb89a0c46ec4f8d1428c0bafdbcc2 /sql/sql_class.h
parent8685094e159f29f2b00642f579be4ca681a10247 (diff)
downloadmariadb-git-02f007436f68a50945aa05f5b880b0bd2e7ab4d3.tar.gz
Added Unique class to be used for duplicate removal in multi-table delete.
Diffstat (limited to 'sql/sql_class.h')
-rw-r--r--sql/sql_class.h29
1 files changed, 29 insertions, 0 deletions
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);
+};