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/user_locks/module.h>
00024
00025 #include <drizzled/atomics.h>
00026 #include <drizzled/session.h>
00027
00028 using namespace drizzled;
00029 using namespace std;
00030
00031 namespace user_locks {
00032 namespace barriers {
00033
00034 UserBarriers::UserBarriers() :
00035 plugin::TableFunction("DATA_DICTIONARY", "USER_DEFINED_BARRIERS")
00036 {
00037 add_field("USER_BARRIER_NAME", plugin::TableFunction::STRING, LARGEST_LOCK_NAME, false);
00038 add_field("SESSION_ID", plugin::TableFunction::NUMBER, 0, false);
00039 add_field("USER_NAME", plugin::TableFunction::STRING);
00040 add_field("WAITER_LIMIT", plugin::TableFunction::NUMBER, 0, false);
00041 add_field("GENERATION", plugin::TableFunction::NUMBER, 0, false);
00042 add_field("WAITERS", plugin::TableFunction::NUMBER, 0, false);
00043 add_field("OBSERVERS", plugin::TableFunction::NUMBER, 0, false);
00044 }
00045
00046 UserBarriers::Generator::Generator(drizzled::Field **arg) :
00047 drizzled::plugin::TableFunction::Generator(arg)
00048 {
00049 Barriers::getInstance().Copy(barrier_map);
00050 iter= barrier_map.begin();
00051 }
00052
00053 bool UserBarriers::Generator::populate()
00054 {
00055
00056 while (iter != barrier_map.end())
00057 {
00058
00059 push(iter->first.getLockName());
00060
00061
00062 push(iter->second->getOwner());
00063
00064
00065 push(iter->first.getUser());
00066
00067
00068 push(iter->second->getLimit());
00069
00070
00071 push(iter->second->getGeneration());
00072
00073
00074 push(iter->second->sizeWaiters());
00075
00076
00077 push(iter->second->sizeObservers());
00078
00079 iter++;
00080 return true;
00081 }
00082
00083 return false;
00084 }
00085
00086 }
00087 }