long CTrainersTable::GetRow(unsigned int nId, tDATA& data) { long res = UDF_E_FAIL; do { char query[MAX_QUERY_LEN] = {0}; sql::ResultSet* qRes = NULL; if(! m_pConnection) { res = UDF_E_NOCONNECTION; break; } sprintf(query, "select * from %s where id = %d", TABLE, nId); qRes = m_pConnection->ExecuteQuery(query); if(!qRes) { res = UDF_E_EXECUTE_QUERY_FAILED; break; } qRes->next(); data.id = qRes->getUInt(1); data.clubId = qRes->getUInt(2); data.name = qRes->getString(3); data.bd = str2date(qRes->getString(4)); data.phone = qRes->getString(5); data.additionalInfo = qRes->getString(6); data.email = qRes->getString(7); res = UDF_OK; }while(0); return res; }
/** * Main daemon routine */ int main(int argc, char **argv) { int c, option_index = 0; const char *bin; char config_file[MAX_OPT_LEN] = ""; bool do_start = false; bool do_reset = false; bool do_resume = false; bool do_complete = false; bool do_status = false; int list_state = -1; int local_flags = 0; int rc; char err_msg[4096]; robinhood_config_t config; struct sigaction act_sigterm; int chgd = 0; char badcfg[RBH_PATH_MAX]; bin = rh_basename(argv[0]); /* supports NULL argument */ /* parse command line options */ while ((c = getopt_long(argc, argv, SHORT_OPT_STRING, option_tab, &option_index)) != -1) { switch (c) { case 'S': do_start = true; break; case 's': do_status = true; break; case 'Z': do_reset = true; break; case 'c': do_complete = true; break; case 'r': do_resume = true; break; case 'L': if (!strcasecmp(optarg, "all")) list_state = RT_ALL; else if (!strcasecmp(optarg, "done")) list_state = RT_DONE; else if (!strcasecmp(optarg, "failed")) list_state = RT_FAILED; else if (!strcasecmp(optarg, "todo")) list_state = RT_TODO; else { fprintf(stderr, "Invalid parameter for option --list: all, done, failed or todo expected.\n"); exit(1); } break; case 'e': local_flags |= RETRY_ERRORS; break; case 'y': local_flags |= NO_CONFIRM; break; case 'f': rh_strncpy(config_file, optarg, MAX_OPT_LEN); break; case 'D': if (!optarg) { fprintf(stderr, "Missing mandatory argument <path> for --dir\n"); exit(1); } else { rh_strncpy(path_buff, optarg, MAX_OPT_LEN); path_filter = path_buff; } break; case 'o': if (!optarg) { fprintf(stderr, "Missing mandatory argument <ost_index> for --ost\n"); exit(1); } /* parse it as a set */ if (lmgr_range2list(optarg, DB_UINT, &ost_list)) { fprintf(stderr, "Invalid value '%s' for --ost option: integer or set expected (e.g. 2 or 3,5-8,10-12).\n", optarg); exit(1); } /* copy arg to display it */ rh_strncpy(ost_range_str, optarg, sizeof(ost_range_str)); break; case 'b': if (!optarg) { fprintf(stderr, "Missing mandatory argument <date_time> for --since\n"); exit(1); } since_time = str2date(optarg); if (since_time == (time_t)-1) { fprintf(stderr, "Invalid date format: yyyymmdd[HH[MM[SS]]] expected\n"); exit(1); } break; case 'l': { int log_level = str2debuglevel(optarg); if (log_level == -1) { fprintf(stderr, "Unsupported log level '%s'. CRIT, MAJOR, EVENT, VERB, DEBUG or FULL expected.\n", optarg); exit(1); } force_debug_level(log_level); break; } case 'h': display_help(bin); exit(0); break; case 'V': display_version(bin); exit(0); break; case ':': case '?': default: display_help(bin); exit(1); break; } } /* check there is no extra arguments */ if (optind != argc) { fprintf(stderr, "Error: unexpected argument on command line: %s\n", argv[optind]); exit(1); } rc = rbh_init_internals(); if (rc != 0) exit(rc); /* get default config file, if not specified */ if (SearchConfig(config_file, config_file, &chgd, badcfg, MAX_OPT_LEN) != 0) { fprintf(stderr, "No config file (or too many) found matching %s\n", badcfg); exit(2); } else if (chgd) { fprintf(stderr, "Using config file '%s'.\n", config_file); } /* only read ListMgr config */ if (ReadRobinhoodConfig(0, config_file, err_msg, &config, false)) { fprintf(stderr, "Error reading configuration file '%s': %s\n", config_file, err_msg); exit(1); } /* XXX HOOK: Set logging to stderr */ strcpy(config.log_config.log_file, "stderr"); strcpy(config.log_config.report_file, "stderr"); strcpy(config.log_config.alert_file, "stderr"); /* Initialize logging */ rc = InitializeLogs(bin, &config.log_config); if (rc) { fprintf(stderr, "Error opening log files: rc=%d, errno=%d: %s\n", rc, errno, strerror(errno)); exit(rc); } /* Initialize filesystem access */ rc = InitFS(); if (rc) exit(rc); /* Initialize status managers (XXX all or just the one used for * recovery?) */ rc = smi_init_all(options.flags); if (rc) exit(rc); /* Initialize list manager */ rc = ListMgr_Init(0); if (rc) { DisplayLog(LVL_CRIT, RECOV_TAG, "Error initializing list manager: %s (%d)", lmgr_err2str(rc), rc); exit(rc); } else DisplayLog(LVL_DEBUG, RECOV_TAG, "ListManager successfully initialized"); if (CheckLastFS() != 0) exit(1); /* Create database access */ rc = ListMgr_InitAccess(&lmgr); if (rc) { DisplayLog(LVL_CRIT, RECOV_TAG, "Error %d: cannot connect to database", rc); exit(rc); } #ifdef _HSM_LITE rc = Backend_Start(&config.backend_config, 0); if (rc) { DisplayLog(LVL_CRIT, RECOV_TAG, "Error initializing backend"); exit(1); } #endif /* create signal handlers */ memset(&act_sigterm, 0, sizeof(act_sigterm)); act_sigterm.sa_flags = 0; act_sigterm.sa_handler = terminate_handler; if (sigaction(SIGTERM, &act_sigterm, NULL) == -1 || sigaction(SIGINT, &act_sigterm, NULL) == -1) { DisplayLog(LVL_CRIT, RECOV_TAG, "Error while setting signal handlers for SIGTERM and SIGINT: %s", strerror(errno)); exit(1); } else DisplayLog(LVL_VERB, RECOV_TAG, "Signals SIGTERM and SIGINT (abort command) are ready to be used"); if (do_status) rc = recov_status(); else if (list_state != -1) rc = recov_list(list_state); else if (do_start) rc = recov_start(); else if (do_reset) rc = recov_reset(local_flags & NO_CONFIRM); else if (do_resume) rc = recov_resume(local_flags & RETRY_ERRORS); else if (do_complete) rc = recov_complete(); else { display_help(bin); rc = 1; } ListMgr_CloseAccess(&lmgr); return rc; }
// do insert test void test_insert__do(void *socket) { // insert 5000 employees int i; for (i = 0; i < 50000; i++) { char name[EMPLOYEE_NAME_SIZE] = { 0 }; sprintf(name, "Name %d", i); InsertResponse *res = test_insert__insert(socket, i, name, (i % 2 == 0) ? EMPLOYEE__GENDER__MALE : EMPLOYEE__GENDER__FEMALE, str2date("01/01/2001"), i, i + 10.00, i + 20.00); assert(res); assert(res->result); insert_response__free_unpacked(res, NULL); } }
long CTrainersTable::Find(tTableMap& data, const tDATA& filter) { long res = UDF_E_FAIL; do { char query[MAX_QUERY_LEN] = {0}; char tmp[MAX_QUERY_LEN] = {0}; sql::ResultSet* qRes = NULL; bool useFilter = false; if(! m_pConnection) { res = UDF_E_NOCONNECTION; break; } if (!filter.name.empty()) { sprintf(tmp, "%sand `name` like '%%%s%%' ", query, filter.name.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (0 != filter.clubId) { sprintf(tmp, "%sand `club_id` = %d ", query, filter.clubId); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!filter.phone.empty()) { sprintf(tmp, "%sand `phone` like '%%%s%%' ", query, filter.phone.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!filter.email.empty()) { sprintf(tmp, "%sand `email` like '%%%s%%' ", query, filter.email.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!filter.additionalInfo.empty()) { sprintf(tmp, "%sand `contact_info` like '%%%s%%' ", query, filter.additionalInfo.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (0 != filter.bd) { sprintf(tmp, "%sand `bd` like '%%%s%%' ", query, date2str(filter.bd).c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if(useFilter) { sprintf(tmp, "select * from %s where 1=1 %s", TABLE, query); strncpy(query, tmp, MAX_QUERY_LEN-1); } else { sprintf(query, "select * from %s", TABLE); } qRes = m_pConnection->ExecuteQuery(query); if(!qRes) { res = UDF_E_EXECUTE_QUERY_FAILED; break; } data.clear(); while( qRes && qRes->next()) { tDATA el = {0}; el.id = qRes->getUInt(1); el.clubId = qRes->getUInt(2); el.name = qRes->getString(3); el.bd = str2date(qRes->getString(4)); el.phone = qRes->getString(5); el.additionalInfo = qRes->getString(6); el.email = qRes->getString(7); data.insert(make_pair(el.id, el)); } res = UDF_OK; }while(0); return res; }