00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022
00023 #include <plugin/utility_dictionary/dictionary.h>
00024
00025 #include <drizzled/atomics.h>
00026 #include <drizzled/session.h>
00027 #include <drizzled/sql_lex.h>
00028
00029 using namespace drizzled;
00030 using namespace std;
00031
00032 drizzled::atomic<uint64_t> counter;
00033
00034 utility_dictionary::Counter::Counter() :
00035 plugin::TableFunction("DATA_DICTIONARY", "COUNTER")
00036 {
00037 add_field("VALUE", plugin::TableFunction::NUMBER, 0, false);
00038 }
00039
00040 bool utility_dictionary::Counter::Generator::populate()
00041 {
00042 if (lex().isSumExprUsed() && count > 0)
00043 return false;
00044
00045 if (lex().current_select->group_list.elements && count > 0)
00046 return false;
00047
00048 if (lex().current_select->explicit_limit or count == 0)
00049 {
00050 push(counter.increment());
00051 }
00052 else
00053 {
00054 return false;
00055 }
00056
00057 count++;
00058
00059 return true;
00060 }