mirror of
https://github.com/haiwen/ccnet-server.git
synced 2025-09-03 05:44:19 +00:00
A few SQL optimizations.
- Avoid querying groups in a loop - Avoid querying org groups in a loop
This commit is contained in:
@@ -1092,29 +1092,11 @@ ccnet_rpc_quit_group (int group_id, const char *user_name, GError **error)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GList *
|
|
||||||
convert_group_list (CcnetGroupManager *mgr, GList *group_ids)
|
|
||||||
{
|
|
||||||
GList *ret = NULL, *ptr;
|
|
||||||
|
|
||||||
for (ptr = group_ids; ptr; ptr = ptr->next) {
|
|
||||||
int group_id = (int)(long)ptr->data;
|
|
||||||
CcnetGroup *group = ccnet_group_manager_get_group (mgr, group_id,
|
|
||||||
NULL);
|
|
||||||
if (group != NULL) {
|
|
||||||
ret = g_list_prepend (ret, group);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return g_list_reverse (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
GList *
|
GList *
|
||||||
ccnet_rpc_get_groups (const char *username, GError **error)
|
ccnet_rpc_get_groups (const char *username, GError **error)
|
||||||
{
|
{
|
||||||
CcnetGroupManager *group_mgr =
|
CcnetGroupManager *group_mgr =
|
||||||
((CcnetServerSession *)session)->group_mgr;
|
((CcnetServerSession *)session)->group_mgr;
|
||||||
GList *group_ids = NULL;
|
|
||||||
GList *ret = NULL;
|
GList *ret = NULL;
|
||||||
|
|
||||||
if (!username) {
|
if (!username) {
|
||||||
@@ -1123,15 +1105,7 @@ ccnet_rpc_get_groups (const char *username, GError **error)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
group_ids = ccnet_group_manager_get_groupids_by_user (group_mgr, username,
|
ret = ccnet_group_manager_get_groups_by_user (group_mgr, username, error);
|
||||||
error);
|
|
||||||
if (group_ids == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = convert_group_list (group_mgr, group_ids);
|
|
||||||
g_list_free (group_ids);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1274,7 +1248,7 @@ ccnet_rpc_remove_org (int org_id, GError **error)
|
|||||||
}
|
}
|
||||||
string_list_free (email_list);
|
string_list_free (email_list);
|
||||||
|
|
||||||
group_ids = ccnet_org_manager_get_org_groups (org_mgr, org_id, 0, INT_MAX);
|
group_ids = ccnet_org_manager_get_org_group_ids (org_mgr, org_id, 0, INT_MAX);
|
||||||
ptr = group_ids;
|
ptr = group_ids;
|
||||||
while (ptr) {
|
while (ptr) {
|
||||||
ccnet_group_manager_remove_group (group_mgr, (int)(long)ptr->data, error);
|
ccnet_group_manager_remove_group (group_mgr, (int)(long)ptr->data, error);
|
||||||
@@ -1474,8 +1448,6 @@ GList *
|
|||||||
ccnet_rpc_get_org_groups (int org_id, int start, int limit, GError **error)
|
ccnet_rpc_get_org_groups (int org_id, int start, int limit, GError **error)
|
||||||
{
|
{
|
||||||
CcnetOrgManager *org_mgr = ((CcnetServerSession *)session)->org_mgr;
|
CcnetOrgManager *org_mgr = ((CcnetServerSession *)session)->org_mgr;
|
||||||
CcnetGroupManager *group_mgr = ((CcnetServerSession *)session)->group_mgr;
|
|
||||||
GList *group_ids = NULL;
|
|
||||||
GList *ret = NULL;
|
GList *ret = NULL;
|
||||||
|
|
||||||
if (org_id < 0) {
|
if (org_id < 0) {
|
||||||
@@ -1488,13 +1460,7 @@ ccnet_rpc_get_org_groups (int org_id, int start, int limit, GError **error)
|
|||||||
start = 0;
|
start = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
group_ids = ccnet_org_manager_get_org_groups (org_mgr, org_id, start,
|
ret = ccnet_org_manager_get_org_groups (org_mgr, org_id, start, limit);
|
||||||
limit);
|
|
||||||
if (group_ids == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
ret = convert_group_list (group_mgr, group_ids);
|
|
||||||
g_list_free (group_ids);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -232,87 +232,45 @@ out:
|
|||||||
return group_id;
|
return group_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static gboolean */
|
|
||||||
/* duplicate_group_name (CcnetGroupManager *mgr, */
|
|
||||||
/* const char *group_name, */
|
|
||||||
/* const char *user_name) */
|
|
||||||
/* { */
|
|
||||||
/* GList *groups = NULL, *ptr; */
|
|
||||||
/* CcnetOrgManager *org_mgr = NULL; */
|
|
||||||
/* gboolean ret = FALSE; */
|
|
||||||
|
|
||||||
/* groups = ccnet_group_manager_get_all_groups (mgr, -1, -1, NULL); */
|
|
||||||
/* if (!groups) { */
|
|
||||||
/* return FALSE; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
/* for (ptr = groups; ptr; ptr = ptr->next) { */
|
|
||||||
/* CcnetGroup *group = (CcnetGroup *)ptr->data; */
|
|
||||||
/* org_mgr = ((CcnetServerSession *)(mgr->session))->org_mgr; */
|
|
||||||
/* if (ccnet_org_manager_is_org_group(org_mgr, ccnet_group_get_id (group), */
|
|
||||||
/* NULL)) { */
|
|
||||||
/* /\* Skip org groups. *\/ */
|
|
||||||
/* continue; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
/* if (g_strcmp0 (group_name, ccnet_group_get_group_name (group)) == 0) { */
|
|
||||||
/* ret = TRUE; */
|
|
||||||
/* goto out; */
|
|
||||||
/* } */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
/* out: */
|
|
||||||
/* for (ptr = groups; ptr; ptr = ptr->next) */
|
|
||||||
/* g_object_unref ((GObject *)ptr->data); */
|
|
||||||
/* g_list_free (groups); */
|
|
||||||
/* return ret; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
int ccnet_group_manager_create_group (CcnetGroupManager *mgr,
|
int ccnet_group_manager_create_group (CcnetGroupManager *mgr,
|
||||||
const char *group_name,
|
const char *group_name,
|
||||||
const char *user_name,
|
const char *user_name,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* if (duplicate_group_name (mgr, group_name, user_name)) { */
|
|
||||||
/* g_set_error (error, CCNET_DOMAIN, 0, "The group has already created"); */
|
|
||||||
/* return -1; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
return create_group_common (mgr, group_name, user_name, error);
|
return create_group_common (mgr, group_name, user_name, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
/* static gboolean */
|
||||||
duplicate_org_group_name (CcnetGroupManager *mgr,
|
/* duplicate_org_group_name (CcnetGroupManager *mgr, */
|
||||||
int org_id,
|
/* int org_id, */
|
||||||
const char *group_name)
|
/* const char *group_name) */
|
||||||
{
|
/* { */
|
||||||
GList *org_groups = NULL, *ptr;
|
/* GList *org_groups = NULL, *ptr; */
|
||||||
CcnetOrgManager *org_mgr = ((CcnetServerSession *)(mgr->session))->org_mgr;
|
/* CcnetOrgManager *org_mgr = ((CcnetServerSession *)(mgr->session))->org_mgr; */
|
||||||
|
|
||||||
org_groups = ccnet_org_manager_get_org_groups (org_mgr, org_id, -1, -1);
|
/* org_groups = ccnet_org_manager_get_org_groups (org_mgr, org_id, -1, -1); */
|
||||||
if (!org_groups)
|
/* if (!org_groups) */
|
||||||
return FALSE;
|
/* return FALSE; */
|
||||||
|
|
||||||
for (ptr = org_groups; ptr; ptr = ptr->next) {
|
/* for (ptr = org_groups; ptr; ptr = ptr->next) { */
|
||||||
int group_id = (int)(long)ptr->data;
|
/* int group_id = (int)(long)ptr->data; */
|
||||||
CcnetGroup *group = ccnet_group_manager_get_group (mgr, group_id,
|
/* CcnetGroup *group = ccnet_group_manager_get_group (mgr, group_id, */
|
||||||
NULL);
|
/* NULL); */
|
||||||
if (!group)
|
/* if (!group) */
|
||||||
continue;
|
/* continue; */
|
||||||
|
|
||||||
if (g_strcmp0 (group_name, ccnet_group_get_group_name(group)) == 0) {
|
/* if (g_strcmp0 (group_name, ccnet_group_get_group_name(group)) == 0) { */
|
||||||
g_list_free (org_groups);
|
/* g_list_free (org_groups); */
|
||||||
g_object_unref (group);
|
/* g_object_unref (group); */
|
||||||
return TRUE;
|
/* return TRUE; */
|
||||||
} else {
|
/* } else { */
|
||||||
g_object_unref (group);
|
/* g_object_unref (group); */
|
||||||
}
|
/* } */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
g_list_free (org_groups);
|
/* g_list_free (org_groups); */
|
||||||
return FALSE;
|
/* return FALSE; */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
int ccnet_group_manager_create_org_group (CcnetGroupManager *mgr,
|
int ccnet_group_manager_create_org_group (CcnetGroupManager *mgr,
|
||||||
int org_id,
|
int org_id,
|
||||||
@@ -322,11 +280,11 @@ int ccnet_group_manager_create_org_group (CcnetGroupManager *mgr,
|
|||||||
{
|
{
|
||||||
CcnetOrgManager *org_mgr = ((CcnetServerSession *)(mgr->session))->org_mgr;
|
CcnetOrgManager *org_mgr = ((CcnetServerSession *)(mgr->session))->org_mgr;
|
||||||
|
|
||||||
if (duplicate_org_group_name (mgr, org_id, group_name)) {
|
/* if (duplicate_org_group_name (mgr, org_id, group_name)) { */
|
||||||
g_set_error (error, CCNET_DOMAIN, 0,
|
/* g_set_error (error, CCNET_DOMAIN, 0, */
|
||||||
"The group has already created in this org.");
|
/* "The group has already created in this org."); */
|
||||||
return -1;
|
/* return -1; */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
int group_id = create_group_common (mgr, group_name, user_name, error);
|
int group_id = create_group_common (mgr, group_name, user_name, error);
|
||||||
if (group_id < 0) {
|
if (group_id < 0) {
|
||||||
@@ -500,10 +458,16 @@ int ccnet_group_manager_set_group_name (CcnetGroupManager *mgr,
|
|||||||
{
|
{
|
||||||
CcnetDB *db = mgr->priv->db;
|
CcnetDB *db = mgr->priv->db;
|
||||||
|
|
||||||
ccnet_db_statement_query (db,
|
if (ccnet_db_type(db) == CCNET_DB_TYPE_PGSQL)
|
||||||
"UPDATE `Group` SET group_name = ? "
|
ccnet_db_statement_query (db,
|
||||||
"WHERE group_id = ?",
|
"UPDATE \"Group\" SET group_name = ? "
|
||||||
2, "string", group_name, "int", group_id);
|
"WHERE group_id = ?",
|
||||||
|
2, "string", group_name, "int", group_id);
|
||||||
|
else
|
||||||
|
ccnet_db_statement_query (db,
|
||||||
|
"UPDATE `Group` SET group_name = ? "
|
||||||
|
"WHERE group_id = ?",
|
||||||
|
2, "string", group_name, "int", group_id);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -537,35 +501,53 @@ int ccnet_group_manager_quit_group (CcnetGroupManager *mgr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
get_group_ids_cb (CcnetDBRow *row, void *data)
|
get_user_groups_cb (CcnetDBRow *row, void *data)
|
||||||
{
|
{
|
||||||
GList **plist = data;
|
GList **plist = data;
|
||||||
|
CcnetGroup *group;
|
||||||
|
|
||||||
int group_id = ccnet_db_row_get_column_int (row, 0);
|
int group_id = ccnet_db_row_get_column_int (row, 0);
|
||||||
|
const char *group_name = ccnet_db_row_get_column_text (row, 1);
|
||||||
|
const char *creator_name = ccnet_db_row_get_column_text (row, 2);
|
||||||
|
gint64 ts = ccnet_db_row_get_column_int64 (row, 3);
|
||||||
|
|
||||||
*plist = g_list_prepend (*plist, (gpointer)(long)group_id);
|
group = g_object_new (CCNET_TYPE_GROUP,
|
||||||
|
"id", group_id,
|
||||||
|
"group_name", group_name,
|
||||||
|
"creator_name", creator_name,
|
||||||
|
"timestamp", ts,
|
||||||
|
"source", "DB",
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
*plist = g_list_prepend (*plist, group);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
GList *
|
GList *
|
||||||
ccnet_group_manager_get_groupids_by_user (CcnetGroupManager *mgr,
|
ccnet_group_manager_get_groups_by_user (CcnetGroupManager *mgr,
|
||||||
const char *user_name,
|
const char *user_name,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CcnetDB *db = mgr->priv->db;
|
CcnetDB *db = mgr->priv->db;
|
||||||
GList *group_ids = NULL;
|
GList *groups = NULL;
|
||||||
|
char *sql;
|
||||||
|
|
||||||
|
if (ccnet_db_type(db) == CCNET_DB_TYPE_PGSQL)
|
||||||
|
sql = "SELECT g.group_id, group_name, creator_name, timestamp FROM "
|
||||||
|
"\"Group\" g, GroupUser u WHERE g.group_id = u.group_id AND user_name=?";
|
||||||
|
else
|
||||||
|
sql = "SELECT g.group_id, group_name, creator_name, timestamp FROM "
|
||||||
|
"`Group` g, GroupUser u WHERE g.group_id = u.group_id AND user_name=?";
|
||||||
|
|
||||||
if (ccnet_db_statement_foreach_row (db,
|
if (ccnet_db_statement_foreach_row (db,
|
||||||
"SELECT group_id FROM GroupUser "
|
sql,
|
||||||
"WHERE user_name=?",
|
get_user_groups_cb, &groups,
|
||||||
get_group_ids_cb, &group_ids,
|
|
||||||
1, "string", user_name) < 0) {
|
1, "string", user_name) < 0) {
|
||||||
g_list_free (group_ids);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_list_reverse (group_ids);
|
return g_list_reverse (groups);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@@ -604,9 +586,11 @@ ccnet_group_manager_get_group (CcnetGroupManager *mgr, int group_id,
|
|||||||
CcnetGroup *ccnetgroup = NULL;
|
CcnetGroup *ccnetgroup = NULL;
|
||||||
|
|
||||||
if (ccnet_db_type(db) == CCNET_DB_TYPE_PGSQL)
|
if (ccnet_db_type(db) == CCNET_DB_TYPE_PGSQL)
|
||||||
sql = "SELECT * FROM \"Group\" WHERE group_id = ?";
|
sql = "SELECT group_id, group_name, creator_name, timestamp FROM "
|
||||||
|
"\"Group\" WHERE group_id = ?";
|
||||||
else
|
else
|
||||||
sql = "SELECT * FROM `Group` WHERE group_id = ?";
|
sql = "SELECT group_id, group_name, creator_name, timestamp FROM "
|
||||||
|
"`Group` WHERE group_id = ?";
|
||||||
if (ccnet_db_statement_foreach_row (db, sql,
|
if (ccnet_db_statement_foreach_row (db, sql,
|
||||||
get_ccnetgroup_cb, &ccnetgroup,
|
get_ccnetgroup_cb, &ccnetgroup,
|
||||||
1, "int", group_id) < 0)
|
1, "int", group_id) < 0)
|
||||||
@@ -647,7 +631,7 @@ ccnet_group_manager_get_group_members (CcnetGroupManager *mgr, int group_id,
|
|||||||
char *sql;
|
char *sql;
|
||||||
GList *group_users = NULL;
|
GList *group_users = NULL;
|
||||||
|
|
||||||
sql = "SELECT * FROM GroupUser WHERE group_id = ?";
|
sql = "SELECT group_id, user_name, is_staff FROM GroupUser WHERE group_id = ?";
|
||||||
if (ccnet_db_statement_foreach_row (db, sql,
|
if (ccnet_db_statement_foreach_row (db, sql,
|
||||||
get_ccnet_groupuser_cb, &group_users,
|
get_ccnet_groupuser_cb, &group_users,
|
||||||
1, "int", group_id) < 0)
|
1, "int", group_id) < 0)
|
||||||
|
@@ -72,9 +72,9 @@ int ccnet_group_manager_quit_group (CcnetGroupManager *mgr,
|
|||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
GList *
|
GList *
|
||||||
ccnet_group_manager_get_groupids_by_user (CcnetGroupManager *mgr,
|
ccnet_group_manager_get_groups_by_user (CcnetGroupManager *mgr,
|
||||||
const char *user_name,
|
const char *user_name,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
CcnetGroup *
|
CcnetGroup *
|
||||||
ccnet_group_manager_get_group (CcnetGroupManager *mgr, int group_id,
|
ccnet_group_manager_get_group (CcnetGroupManager *mgr, int group_id,
|
||||||
|
@@ -559,7 +559,7 @@ ccnet_org_manager_get_org_id_by_group (CcnetOrgManager *mgr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
get_org_groups (CcnetDBRow *row, void *data)
|
get_org_group_ids (CcnetDBRow *row, void *data)
|
||||||
{
|
{
|
||||||
GList **plist = data;
|
GList **plist = data;
|
||||||
|
|
||||||
@@ -571,10 +571,10 @@ get_org_groups (CcnetDBRow *row, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GList *
|
GList *
|
||||||
ccnet_org_manager_get_org_groups (CcnetOrgManager *mgr,
|
ccnet_org_manager_get_org_group_ids (CcnetOrgManager *mgr,
|
||||||
int org_id,
|
int org_id,
|
||||||
int start,
|
int start,
|
||||||
int limit)
|
int limit)
|
||||||
{
|
{
|
||||||
CcnetDB *db = mgr->priv->db;
|
CcnetDB *db = mgr->priv->db;
|
||||||
GList *ret = NULL;
|
GList *ret = NULL;
|
||||||
@@ -584,13 +584,13 @@ ccnet_org_manager_get_org_groups (CcnetOrgManager *mgr,
|
|||||||
rc = ccnet_db_statement_foreach_row (db,
|
rc = ccnet_db_statement_foreach_row (db,
|
||||||
"SELECT group_id FROM OrgGroup WHERE "
|
"SELECT group_id FROM OrgGroup WHERE "
|
||||||
"org_id = ?",
|
"org_id = ?",
|
||||||
get_org_groups, &ret,
|
get_org_group_ids, &ret,
|
||||||
1, "int", org_id);
|
1, "int", org_id);
|
||||||
} else {
|
} else {
|
||||||
rc = ccnet_db_statement_foreach_row (db,
|
rc = ccnet_db_statement_foreach_row (db,
|
||||||
"SELECT group_id FROM OrgGroup WHERE "
|
"SELECT group_id FROM OrgGroup WHERE "
|
||||||
"org_id = ? LIMIT ? OFFSET ?",
|
"org_id = ? LIMIT ? OFFSET ?",
|
||||||
get_org_groups, &ret,
|
get_org_group_ids, &ret,
|
||||||
3, "int", org_id, "int", limit,
|
3, "int", org_id, "int", limit,
|
||||||
"int", start);
|
"int", start);
|
||||||
}
|
}
|
||||||
@@ -603,6 +603,66 @@ ccnet_org_manager_get_org_groups (CcnetOrgManager *mgr,
|
|||||||
return g_list_reverse (ret);
|
return g_list_reverse (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
get_org_groups (CcnetDBRow *row, void *data)
|
||||||
|
{
|
||||||
|
GList **plist = data;
|
||||||
|
CcnetGroup *group;
|
||||||
|
|
||||||
|
int group_id = ccnet_db_row_get_column_int (row, 0);
|
||||||
|
const char *group_name = ccnet_db_row_get_column_text (row, 1);
|
||||||
|
const char *creator_name = ccnet_db_row_get_column_text (row, 2);
|
||||||
|
gint64 ts = ccnet_db_row_get_column_int64 (row, 3);
|
||||||
|
|
||||||
|
group = g_object_new (CCNET_TYPE_GROUP,
|
||||||
|
"id", group_id,
|
||||||
|
"group_name", group_name,
|
||||||
|
"creator_name", creator_name,
|
||||||
|
"timestamp", ts,
|
||||||
|
"source", "DB",
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
*plist = g_list_prepend (*plist, group);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
GList *
|
||||||
|
ccnet_org_manager_get_org_groups (CcnetOrgManager *mgr,
|
||||||
|
int org_id,
|
||||||
|
int start,
|
||||||
|
int limit)
|
||||||
|
{
|
||||||
|
CcnetDB *db = mgr->priv->db;
|
||||||
|
char *sql;
|
||||||
|
GList *ret = NULL;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (limit == -1) {
|
||||||
|
sql = "SELECT g.group_id, group_name, creator_name, timestamp FROM "
|
||||||
|
"OrgGroup o, `Group` g WHERE o.group_id = g.group_id AND org_id = ?";
|
||||||
|
rc = ccnet_db_statement_foreach_row (db,
|
||||||
|
sql,
|
||||||
|
get_org_groups, &ret,
|
||||||
|
1, "int", org_id);
|
||||||
|
} else {
|
||||||
|
sql = "SELECT g.group_id, group_name, creator_name, timestamp FROM "
|
||||||
|
"OrgGroup o, `Group` g WHERE o.group_id = g.group_id AND org_id = ? "
|
||||||
|
"LIMIT ? OFFSET ?";
|
||||||
|
rc = ccnet_db_statement_foreach_row (db,
|
||||||
|
sql,
|
||||||
|
get_org_groups, &ret,
|
||||||
|
3, "int", org_id, "int", limit,
|
||||||
|
"int", start);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_list_reverse (ret);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ccnet_org_manager_org_user_exists (CcnetOrgManager *mgr,
|
ccnet_org_manager_org_user_exists (CcnetOrgManager *mgr,
|
||||||
int org_id,
|
int org_id,
|
||||||
|
@@ -97,6 +97,12 @@ ccnet_org_manager_get_org_id_by_group (CcnetOrgManager *mgr,
|
|||||||
int group_id,
|
int group_id,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
GList *
|
||||||
|
ccnet_org_manager_get_org_group_ids (CcnetOrgManager *mgr,
|
||||||
|
int org_id,
|
||||||
|
int start,
|
||||||
|
int limit);
|
||||||
|
|
||||||
GList *
|
GList *
|
||||||
ccnet_org_manager_get_org_groups (CcnetOrgManager *mgr,
|
ccnet_org_manager_get_org_groups (CcnetOrgManager *mgr,
|
||||||
int org_id,
|
int org_id,
|
||||||
|
Reference in New Issue
Block a user