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 drizzled::identifier::user::ptr user_identifier(getSession().user());
00042 bool result= arg_count == 2
00043 ? Barriers::getInstance().create(Key(*user_identifier, res->c_str()), getSession().getSessionId(), args[1]->val_int())
00044 : Barriers::getInstance().create(Key(*user_identifier, res->c_str()), getSession().getSessionId());
00045 if (not result)
00046 return 0;
00047 barriers::Storable *list= getSession().getProperty<barriers::Storable>(barriers::property_key);
00048 if (not list)
00049 list= getSession().setProperty(barriers::property_key, new barriers::Storable(getSession().getSessionId()));
00050 list->insert(Key(*user_identifier, res->c_str()));
00051 return 1;
00052 }
00053
00054 }
00055 }