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
00028 extern char **environ;
00029
00030 using namespace drizzled;
00031 using namespace std;
00032
00033 #define LARGEST_ENV_STRING 512
00034
00035 utility_dictionary::Environmental::Environmental() :
00036 plugin::TableFunction("DATA_DICTIONARY", "ENVIRONMENTAL")
00037 {
00038 add_field("VARIABLE_NAME", plugin::TableFunction::STRING, LARGEST_ENV_STRING, true);
00039 add_field("VARIABLE_VALUE", plugin::TableFunction::STRING, LARGEST_ENV_STRING, false);
00040 }
00041
00042 utility_dictionary::Environmental::Generator::Generator(drizzled::Field **arg) :
00043 drizzled::plugin::TableFunction::Generator(arg),
00044 position(0)
00045 {
00046 position= environ;
00047 }
00048
00049 bool utility_dictionary::Environmental::Generator::populate()
00050 {
00051 if (not *position)
00052 return false;
00053
00054 char *value= NULL;
00055 if ((value= strchr(*position, '=')))
00056 {
00057 value++;
00058 }
00059
00060 if (value)
00061 {
00062 std::string substring(*position, 0, (size_t)(value - *position -1));
00063 push(substring);
00064
00065 substring.assign(value, 0, LARGEST_ENV_STRING);
00066 push(substring);
00067 }
00068 else
00069 {
00070 std::string substring(*position, 0, LARGEST_ENV_STRING);
00071 push(false);
00072 }
00073
00074 position++;
00075
00076 return true;
00077 }