static NEOERR* city_cmd_id(struct city_entry *e, QueueEntry *q) { unsigned char *val = NULL; size_t vsize = 0; int id; NEOERR *err; mdb_conn *db = e->db; struct cache *cd = e->cd; REQ_GET_PARAM_INT(q->hdfrcv, "id", id); if (cache_getf(cd, &val, &vsize, PREFIX_CITY"%d", id)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { MDB_QUERY_RAW(db, "city", _COL_CITY, "id=%d", NULL, id); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_Z); if (err != STATUS_OK) return nerr_pass(err); /* * get city's parents */ int cnt = 0; char *pid = hdf_get_valuef(q->hdfsnd, "citys.0.pid"); while (pid && atoi(pid) > 0) { MDB_QUERY_RAW(db, "city", _COL_CITY, "id=%d", NULL, atoi(pid)); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_Z); TRACE_NOK(err); pid = hdf_get_valuef(q->hdfsnd, "citys.%d.pid", ++cnt); } CACHE_HDF(q->hdfsnd, CITY_CC_SEC, PREFIX_CITY"%d", id); } return STATUS_OK; }
NEOERR* blog_index_static_get(HDF *hdf, HASH *dbh) { mdb_conn *conn = (mdb_conn*)hash_lookup(dbh, "aux"); NEOERR *err; LPRE_DBOP(hdf, conn); /* set pgtt for caller use */ MMISC_PAGEDIV_SET(hdf, PRE_OUTPUT, conn, "blog", " state=%d ", NULL, BLOG_ST_NORMAL); int ntt = hdf_get_int_value(hdf, PRE_OUTPUT".ntt", 0); int pgtt = (ntt+BLOG_NUM_PERPAGE-1) / BLOG_NUM_PERPAGE; hdf_set_int_value(hdf, PRE_OUTPUT".pgtt", pgtt); int offset = 0; int pageid = hdf_get_int_value(hdf, PRE_QUERY".pageid", 0); if (pageid == 0) offset = (pgtt - 1) * BLOG_NUM_PERPAGE; else offset = (pageid-1) * BLOG_NUM_PERPAGE; MDB_QUERY_RAW(conn, "blog", BLOG_COL, " state=%d ORDER BY ID " " LIMIT %d OFFSET %d", NULL, BLOG_ST_NORMAL, BLOG_NUM_PERPAGE, offset); return nerr_pass(mdb_set_rows(hdf, conn, BLOG_COL, PRE_OUTPUT".blogs", "0")); }
NEOERR* fill_trackarea(HASH *evth, HASH *dbh) { mdb_conn *conn = (mdb_conn*)hash_lookup(dbh, "dyn"); mevent_t *evt = (mevent_t*)hash_lookup(evth, "place"); HDF *node; hdf_init(&node); char *ip, *aid, *uid, *city, *area; NEOERR *err; LPRE_ALLOP(node, conn, evt); MDB_QUERY_RAW(conn, "track", COL_TRACK, "intime > current_date AND " " area='' GROUP BY aid, uid", NULL); err = mdb_set_rows(node, conn, COL_TRACK, NULL, NULL); if (err != STATUS_OK) return nerr_pass(err); node = hdf_obj_child(node); while (node) { ip = hdf_get_value(node, "ip", NULL); aid = hdf_get_value(node, "aid", "0"); uid = hdf_get_value(node, "uid", "0"); if (ip) { hdf_set_value(evt->hdfsnd, "ip", ip); MEVENT_TRIGGER_NRET(evt, ip, REQ_CMD_PLACEGET, FLAGS_SYNC); city = hdf_get_value(evt->hdfrcv, "0.c", "Mars"); area = city2area(city); MDB_EXEC(conn, NULL, "UPDATE track SET area=$1 WHERE aid=$2 AND uid=$3", "sss", area, aid, uid); } node = hdf_obj_next(node); } return STATUS_OK; }
/* * input : aname(STR) * return: NORMAL * reply : [appfoo: ["aid": "222", "aname": "appfoo", ...] */ static NEOERR* aic_cmd_appusers(struct queue_entry *q, struct cache *cd, mdb_conn *db) { unsigned char *val = NULL; size_t vsize = 0; int aid, lm = 0; char *aname; NEOERR *err; REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname); REQ_FETCH_PARAM_INT(q->hdfrcv, "limit", lm); aid = hash_string(aname); if (cache_getf(cd, &val, &vsize, PREFIX_USERLIST"%d", aid)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { if (lm > 0) { MDB_QUERY_RAW(db, "userinfo", USERINFO_COL, "aid=%d ORDER BY uptime DESC LIMIT %d;", NULL, aid, lm); } else { MDB_QUERY_RAW(db, "userinfo", USERINFO_COL, "aid=%d ORDER BY uptime DESC;", NULL, aid); } err = mdb_set_rows(q->hdfsnd, db, USERINFO_COL, "userlist", "1"); if (err != STATUS_OK) return nerr_pass(err); CACHE_HDF(q->hdfsnd, AIC_CC_SEC, PREFIX_USERLIST"%d", aid); } return STATUS_OK; }
static NEOERR* aux_cmd_impget(struct queue_entry *q, struct cache *cd, mdb_conn *db) { unsigned char *val = NULL; size_t vsize = 0; NEOERR *err; char *aname; int aid, count, offset; REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname); aid = hash_string(aname); mmisc_pagediv(q->hdfrcv, NULL, &count, &offset, NULL, q->hdfsnd); if (cache_getf(cd, &val, &vsize, PREFIX_IMP"%d_%d", aid, offset)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { MMISC_PAGEDIV_SET_N(q->hdfsnd, db, "improve", "aid=%d", NULL, aid); MDB_QUERY_RAW(db, "improve", IMP_COL, "aid=%d ORDER BY id DESC LIMIT " " %d OFFSET %d", NULL, aid, count, offset); err = mdb_set_rows(q->hdfsnd, db, IMP_COL, "imps", "0"); if (err != STATUS_OK) return nerr_pass(err); CACHE_HDF(q->hdfsnd, IMP_CC_SEC, PREFIX_IMP"%d_%d", aid, offset); } return STATUS_OK; }
NEOERR* system_who_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { STRING str; string_init(&str); mdb_conn *db = hash_lookup(dbh, "trace"); char *mname; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); MEMBER_CHECK_ADMIN(); SET_DASHBOARD_ACTION(cgi->hdf); hdf_set_int_value(cgi->hdf, PRE_QUERY".type", TRACE_TYPE_PAGEVIEW); err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY), hdf_get_obj(g_cfg, "Db.QueryCond.system.who"), &str, NULL); if (err != STATUS_OK) return nerr_pass(err); MDB_QUERY_RAW(db, "emap", _COL_EMAP_WHO, " %s GROUP BY sender ORDER BY min(intime) DESC LIMIT 100", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_WHO, PRE_OUTPUT".who", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); string_clear(&str); hdf_set_attr(cgi->hdf, PRE_OUTPUT".who", "type", "array"); return STATUS_OK; }
NEOERR* system_plan_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mdb_conn *db = hash_lookup(dbh, "plan"); STRING str; string_init(&str); int count, offset; char *mname; HDF *node; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); MEMBER_CHECK_ADMIN(); SET_DASHBOARD_ACTION(cgi->hdf); hdf_get_node(cgi->hdf, PRE_OUTPUT, &node); mdb_pagediv(hdf_get_obj(cgi->hdf, PRE_QUERY), NULL, &count, &offset, NULL, node); err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY), hdf_get_obj(g_cfg, "Db.QueryCond.system.plan"), &str, "intime > current_date - 1"); if (err != STATUS_OK) return nerr_pass(err); MDB_PAGEDIV_SET_N(node, db, "plan", "%s", NULL, str.buf); MDB_QUERY_RAW(db, "plan", _COL_PLAN_ADMIN, "%s ORDER BY id DESC LIMIT %d OFFSET %d", NULL, str.buf, count, offset); err = mdb_set_rows(cgi->hdf, db, _COL_PLAN_ADMIN, PRE_OUTPUT".rows", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); return STATUS_OK; }
NEOERR* system_comment_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mdb_conn *db = hash_lookup(dbh, "aux"); STRING str; string_init(&str); char *mname; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); MEMBER_CHECK_ADMIN(); SET_DASHBOARD_ACTION(cgi->hdf); if (!hdf_get_value(cgi->hdf, PRE_QUERY".times", NULL)) hdf_set_value(cgi->hdf, PRE_QUERY".timed", "current_date - 7"); err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY), hdf_get_obj(g_cfg, "Db.QueryCond.system.comment"), &str, NULL); if (err != STATUS_OK) return nerr_pass(err); MDB_QUERY_RAW(db, "comment", _COL_CMT, "%s ORDER BY id DESC", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_CMT, PRE_OUTPUT".rows", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); return STATUS_OK; }
NEOERR* system_view_detail_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { STRING str; string_init(&str); mdb_conn *db = hash_lookup(dbh, "trace"); char *mname; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); MEMBER_CHECK_ADMIN(); SET_DASHBOARD_ACTION(cgi->hdf); err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY), hdf_get_obj(g_cfg, "Db.QueryCond.system.viewdetail"), &str, NULL); if (err != STATUS_OK) return nerr_pass(err); MDB_QUERY_RAW(db, "emap", _COL_EMAP_VIEW_DETAIL, " %s ORDER BY intime LIMIT 100", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_VIEW_DETAIL, PRE_OUTPUT".details", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); string_clear(&str); hdf_set_attr(cgi->hdf, PRE_OUTPUT".details", "type", "array"); return STATUS_OK; }
NEOERR* pos_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mdb_conn *db = hash_lookup(dbh, "city"); NEOERR *err; if (!cgi || !cgi->hdf || !db) return nerr_raise(NERR_ASSERT, "paramter null"); MDB_QUERY_RAW(db, "city", _COL_CITY, "geopos ?- point '(0,0)' LIMIT 1000", NULL); return nerr_pass(mdb_set_rows(cgi->hdf, db, _COL_CITY, PRE_OUTPUT".cts", NULL)); }
static NEOERR* aic_cmd_appousers(struct queue_entry *q, struct cache *cd, mdb_conn *db) { unsigned char *val = NULL; size_t vsize = 0; int count, offset; int pid; char *pname, *aname; NEOERR *err; REQ_GET_PARAM_STR(q->hdfrcv, "pname", pname); pid = hash_string(pname); mmisc_pagediv(q->hdfrcv, NULL, &count, &offset, NULL, q->hdfsnd); if (cache_getf(cd, &val, &vsize, PREFIX_APPOUSER"%d_%d", pid, offset)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { MMISC_PAGEDIV_SET_N(q->hdfsnd, db, "appinfo", "pid=%d OR aid=%d", NULL, pid, pid); MDB_QUERY_RAW(db, "appinfo", APPINFO_COL, "pid=%d OR aid=%d ORDER BY uptime DESC LIMIT %d OFFSET %d", NULL, pid, pid, count, offset); err = mdb_set_rows(q->hdfsnd, db, APPINFO_COL, "users", "1"); if (err != STATUS_OK) return nerr_pass(err); HDF *node = hdf_get_child(q->hdfsnd, "users"); while (node) { /* numcamer */ aname = hdf_get_value(node, "aname", NULL); if (aname) { MDB_QUERY_RAW(db, "userinfo", " COUNT(*) AS numcamer ", "aid=%d", NULL, hash_string(aname)); err = mdb_set_row(node, db, " numcamer ", NULL); if (err != STATUS_OK) return nerr_pass(err); } node = hdf_obj_next(node); } CACHE_HDF(q->hdfsnd, AIC_CC_SEC, PREFIX_APPOUSER"%d_%d", pid, offset); } return STATUS_OK; }
int tjt_get_data(HDF *hdf, HASH *dbh, session_t *ses) { char *buf, tbl[LEN_TB]; size_t datalen; file_t *fl; ULIST *ul = NULL; int count, offset, aid, fid, ret; mdb_conn *dbsys, *dbtjt; dbsys = (mdb_conn*)hash_lookup(dbh, "Sys"); dbtjt = (mdb_conn*)hash_lookup(dbh, "Tjt"); PRE_DBOP(hdf, dbsys); PRE_DBOP(hdf, dbtjt); aid = ses->file->aid; fid = ses->file->id; snprintf(tbl, sizeof(tbl), "tjt_%d", aid); /* TODO ses->file not null all time? */ //if (ses->file != NULL) lutil_fill_layout_by_file(dbsys, ses->file, hdf); if (file_get_info_by_id(dbsys, aid, NULL, -1, &fl) == RET_RBTOP_OK) { hdf_set_value(hdf, PRE_OUTPUT".navtitle", fl->remark); file_del(fl); } file_get_nav_by_id(dbsys, aid, PRE_OUTPUT, hdf); ret = file_check_user_power(hdf, dbsys, ses, ses->file, LMT_APPEND); if (ret == RET_RBTOP_OK) { hdf_set_value(hdf, PRE_OUTPUT".appendable", "1"); } lutil_fetch_countf(hdf, dbtjt, tbl, "fid=%d", fid); mmisc_get_offset(hdf, &count, &offset); buf = mmc_getf(&datalen, 0, PRE_MMC_TJT".%d.%d", fid, offset); if (buf == NULL || datalen < sizeof(tjt_t)) { LDB_QUERY_RAW(dbtjt, "tjt_%d", TJT_QUERY_COL, "fid=%d ORDER BY uptime " " LIMIT %d OFFSET %d", NULL, aid, fid, count, offset); mdb_set_rows(hdf, dbtjt, TJT_QUERY_COL, PRE_OUTPUT".atoms"); lutil_image_expand(hdf, PRE_OUTPUT".atoms", "img", IMG_PATH, IMG_S, "imgurl"); lcs_hdf2list(hdf, PRE_OUTPUT".atoms", tjt_hdf2item, &ul); ret = list_pack(ul, TJT_LEN, tjt_pack_nalloc, &buf, &datalen); if (ret == RET_RBTOP_OK) { mmc_storef(MMC_OP_SET, buf, datalen, HALF_HOUR, 0, PRE_MMC_TJT".%d.%d", fid, offset); } } else { list_unpack(buf, tjt_unpack, datalen, &ul); ret = lcs_list2hdf(ul, PRE_OUTPUT".atoms", tjt_item2hdf, hdf); if (ret != RET_RBTOP_OK) { mtc_err("assembly tjt from mmc error"); return RET_RBTOP_MMCERR; } } uListDestroyFunc(&ul, tjt_del); free(buf); return ret; }
/* * ids=0:1 * { "0": { "1": { "ntt": "0", "nst": "0" } }, "success": "1" } * * ids=0:1,0:20 * { "0": { "1": { "ntt": "0", "nst": "0" }, "20": { "ntt": "0", "nst": "0" } }, "success": "1" } * * ids=0:1,1:20 * { "0": { "1": { "ntt": "0", "nst": "0" } }, "1": { "20": { "ntt": "0", "nst": "0" } }, "success": "1" } */ static NEOERR* aux_cmd_cmtget(struct aux_entry *e, QueueEntry *q) { unsigned char *val = NULL; size_t vsize = 0; int count, offset; char *ids, *idsdump, tok[128]; int type = -1, oid = -1; NEOERR *err; REQ_GET_PARAM_STR(q->hdfrcv, "ids", ids); mdb_conn *db = e->db; struct cache *cd = e->cd; mdb_pagediv(q->hdfrcv, NULL, &count, &offset, NULL, q->hdfsnd); if (cache_getf(cd, &val, &vsize, PREFIX_COMMENT"%s_%d", ids, offset)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { idsdump = strdup(ids); char *p = ids; while (*p) { if (*p == ':') { *p = '\0'; type = atoi(ids); ids = p+1; } if (*p == ',') { *p = '\0'; oid = atoi(ids); if (type >= 0 && oid >= 0) { sprintf(tok, "%d.%d", type, oid); MDB_PAGEDIV_SET(q->hdfsnd, tok, db, "comment", "type=%d AND statu=%d AND oid=%d", NULL, type, CMT_ST_NORMAL, oid); MDB_QUERY_RAW(db, "comment", _COL_CMT, "type=%d AND statu=%d AND oid=%d " " ORDER BY intime DESC LIMIT %d OFFSET %d", NULL, type, CMT_ST_NORMAL, oid, count, offset); sprintf(tok, "%d.%d.cmts", type, oid); err = mdb_set_rows(q->hdfsnd, db, _COL_CMT, tok, NULL); nerr_handle(&err, NERR_NOT_FOUND); if (err != STATUS_OK) return nerr_pass(err); mstr_html_escape(hdf_get_child(q->hdfsnd, tok), "content"); type = oid = -1; } ids = p+1; } p++; } oid = atoi(ids); if (type >= 0 && oid >=0) { sprintf(tok, "%d.%d", type, oid); MDB_PAGEDIV_SET(q->hdfsnd, tok, db, "comment", "type=%d AND statu=%d AND oid=%d", NULL, type, CMT_ST_NORMAL, oid); MDB_QUERY_RAW(db, "comment", _COL_CMT, "type=%d AND statu=%d AND oid=%d " " ORDER BY intime DESC LIMIT %d OFFSET %d", NULL, type, CMT_ST_NORMAL, oid, count, offset); sprintf(tok, "%d.%d.cmts", type, oid); err = mdb_set_rows(q->hdfsnd, db, _COL_CMT, tok, NULL); nerr_handle(&err, NERR_NOT_FOUND); if (err != STATUS_OK) return nerr_pass(err); mstr_html_escape(hdf_get_child(q->hdfsnd, tok), "content"); } CACHE_HDF(q->hdfsnd, CMT_CC_SEC, PREFIX_COMMENT"%s_%d", idsdump, offset); free(idsdump); } return STATUS_OK; }
NEOERR* system_view_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mdb_conn *db = hash_lookup(dbh, "trace"); STRING str; string_init(&str); char *mname, *s; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); MEMBER_CHECK_ADMIN(); SET_DASHBOARD_ACTION(cgi->hdf); /* * prepare query condition */ hdf_set_int_value(cgi->hdf, PRE_QUERY".type", TRACE_TYPE_PAGEVIEW); HDF_FETCH_STR(cgi->hdf, PRE_QUERY".times", s); if (!s) hdf_set_value(cgi->hdf, PRE_QUERY".timed", "current_date - 2"); err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY), hdf_get_obj(g_cfg, "Db.QueryCond.system.view"), &str, NULL); if (err != STATUS_OK) return nerr_pass(err); /* * pageview */ MDB_QUERY_RAW(db, "emap", _COL_EMAP_PAGEVIEW, " %s GROUP BY date_trunc('hour', intime) " " ORDER BY date_trunc('hour', intime)", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_PAGEVIEW, PRE_OUTPUT".pageviews", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); /* * userview */ MDB_QUERY_RAW(db, "emap", _COL_EMAP_USERVIEW, " %s GROUP BY date_trunc('hour', intime) " " ORDER BY date_trunc('hour', intime)", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_USERVIEW, PRE_OUTPUT".userviews", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); /* * day count */ MDB_QUERY_RAW(db, "emap", _COL_EMAP_DATEVIEW, " %s GROUP BY date_trunc('day', intime) " " ORDER BY date_trunc('day', intime)", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_DATEVIEW, PRE_OUTPUT".dateviews", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); MDB_QUERY_RAW(db, "emap", _COL_EMAP_DATEUSER, " %s GROUP BY date_trunc('day', intime) " " ORDER BY date_trunc('day', intime)", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_DATEUSER, PRE_OUTPUT".dateusers", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); string_clear(&str); hdf_set_attr(cgi->hdf, PRE_OUTPUT".pageviews", "type", "array"); hdf_set_attr(cgi->hdf, PRE_OUTPUT".userviews", "type", "array"); return STATUS_OK; }
static NEOERR* city_cmd_s(struct city_entry *e, QueueEntry *q) { unsigned char *val = NULL; size_t vsize = 0; char *p = NULL, *c; NEOERR *err; mdb_conn *db = e->db; struct cache *cd = e->cd; REQ_GET_PARAM_STR(q->hdfrcv, "c", c); REQ_FETCH_PARAM_STR(q->hdfrcv, "p", p); if (cache_getf(cd, &val, &vsize, PREFIX_CITY"%s.%s", p, c)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { if (p) { char tok[64] = {0}; strncpy(tok, p, 64); if (!strstr(p, "省") && !strstr(p, "区")) snprintf(tok, sizeof(tok), "%s省", p); MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", tok); mdb_set_row(q->hdfsnd, db, _COL_CITY, "province", MDB_FLAG_NO_ERR); } MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", c); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_Z); if (nerr_handle(&err, NERR_NOT_FOUND)) { if (strstr(c, "市")) c[strlen(c)-3] = '\0'; MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", c); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_EMPTY_OK); } if (err != STATUS_OK) return nerr_pass(err); /* * get city's parents */ int cnt = 0; char *pid = hdf_get_valuef(q->hdfsnd, "citys.0.pid"); while (pid && atoi(pid) > 0) { MDB_QUERY_RAW(db, "city", _COL_CITY, "id=%d", NULL, atoi(pid)); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_Z); TRACE_NOK(err); pid = hdf_get_valuef(q->hdfsnd, "citys.%d.pid", ++cnt); } /* * 北京市 has no subcities */ /* int id = hdf_get_int_value(q->hdfsnd, "city.id", 0); MDB_QUERY_RAW(db, "city", _COL_CITY, "pid=%d", NULL, id); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "subcities", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); */ CACHE_HDF(q->hdfsnd, CITY_CC_SEC, PREFIX_CITY"%s.%s", p, c); } return STATUS_OK; }