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 #include <plugin/user_locks/module.h>
00023 #include <plugin/user_locks/barrier_storage.h>
00024
00025 #include <string>
00026
00027 namespace user_locks {
00028 namespace barriers {
00029
00030 int64_t CreateBarrier::val_int()
00031 {
00032 drizzled::String *res= args[0]->val_str(&value);
00033
00034 if (not res || not res->length())
00035 {
00036 my_error(drizzled::ER_USER_LOCKS_INVALID_NAME_BARRIER, MYF(0));
00037 return 0;
00038 }
00039 null_value= false;
00040
00041 barriers::Storable *list= static_cast<barriers::Storable *>(getSession().getProperty(barriers::property_key));
00042
00043 bool result;
00044
00045 drizzled::identifier::User::const_shared_ptr user_identifier(getSession().user());
00046 if (arg_count == 2)
00047 {
00048 int64_t wait_for;
00049 wait_for= args[1]->val_int();
00050
00051 result= Barriers::getInstance().create(Key(*user_identifier, res->c_str()), getSession().getSessionId(), wait_for);
00052 }
00053 else
00054 {
00055 result= Barriers::getInstance().create(Key(*user_identifier, res->c_str()), getSession().getSessionId());
00056 }
00057
00058
00059 if (result)
00060 {
00061 if (not list)
00062 {
00063 list= new barriers::Storable(getSession().getSessionId());
00064 getSession().setProperty(barriers::property_key, list);
00065 }
00066
00067 list->insert(Key(*user_identifier, res->c_str()));
00068
00069 return 1;
00070 }
00071
00072 return 0;
00073 }
00074
00075 }
00076 }