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 utility_dictionary::RandomNumber::RandomNumber() :
00033 plugin::TableFunction("DATA_DICTIONARY", "RANDOM_NUMBER")
00034 {
00035 add_field("VALUE", plugin::TableFunction::NUMBER, 0, false);
00036 }
00037
00038 bool utility_dictionary::RandomNumber::Generator::populate()
00039 {
00040 if (lex().isSumExprUsed() && count > 0)
00041 return false;
00042
00043 if (lex().current_select->group_list.elements && count > 0)
00044 return false;
00045
00046 if (lex().current_select->explicit_limit or count == 0)
00047 {
00048 push(static_cast<int64_t>(random()));
00049 }
00050 else
00051 {
00052 return false;
00053 }
00054
00055 count++;
00056
00057 return true;
00058 }