int tb_activity_insert_mdb(lua_State *L) { tb_activity_record &record = g_dbrecord._tb_activity_record; int statement = cli_statement(g_session, "insert into tb_activity"); if ( statement < 0 ) { return luaL_error(L, "Failed to create statement(%s)", get_cli_error_msg(statement)); } int rc; rc = cli_column(statement, "activity_id", cli_int8, NULL, &record.activity_id ); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_column(%s)", get_cli_error_msg(rc)); } rc = cli_column(statement, "activity_name", cli_asciiz, NULL, record.activity_name ); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_column(%s)", get_cli_error_msg(rc)); } cli_oid_t oid; rc = cli_insert(statement, &oid); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to insert(%s)", get_cli_error_msg(rc)); } rc = cli_free(statement); if ( rc != cli_ok ) { return luaL_error(L, "Failed to free statement(%s)", get_cli_error_msg(rc)); } return 0; }
void free_statement() { while ( queue_empty(&g_freestatement) ) { int statement = 0; queue_pop(&g_freestatement, &statement); if ( statement != 0 ) { cli_free(statement); } } }
void shell_free(Shell *shell) { vTaskDelete(shell->task); input_free(shell->input); cli_free(shell->cli); vt102_free(shell->vt102); }
int tb_activity_prepare(lua_State *L) { tb_activity_record &record = g_dbrecord._tb_activity_record; tb_activity_record &precord = g_dbprecord._tb_activity_record; int &statement = g_statement._tb_activity_statement; int rc; if ( statement > 0 ) { rc = cli_free(statement); if ( rc != cli_ok ) { return luaL_error(L, "Failed to call cli_free(%s)", get_cli_error_msg(rc)); } } const char *subsql = lua_tostring(L, 1); char sql[255] = {0}; snprintf(sql, sizeof(sql), "select * from tb_activity where %s", subsql); statement = cli_statement(g_session, sql); if ( statement < 0 ) { return luaL_error(L, "Failed to prepare query(%s)", get_cli_error_msg(statement)); } memset(&record, 0x00, sizeof(record)); memset(&precord, 0x00, sizeof(precord)); rc = cli_column(statement, "activity_id", cli_int8, NULL, &record.activity_id); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_column(%s) activity_id", get_cli_error_msg(rc)); } rc = cli_column(statement, "activity_name", cli_asciiz, NULL, record.activity_name); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_column(%s) activity_name", get_cli_error_msg(rc)); } // t["tb_activity"] = statement lua_pushstring(L, "tb_activity"); lua_pushinteger(L, statement); lua_settable(L, lua_upvalueindex(1)); return 0; }
static void tcp_cli_event(int fd, short events, void *userdata) { struct client *cli = userdata; bool ok = true; if (events & EV_READ) ok = tcp_read_runq(&cli->rst); if (events & EV_TIMEOUT) ok = false; if (!ok) cli_free(cli); }
int tb_activity_remove(lua_State *L) { tb_activity_record &record = g_dbrecord._tb_activity_record; int rc; int statement = cli_statement(g_session, "select * from tb_activity where activity_id = %activity_id"); if (statement < 0) { return luaL_error(L, "Failed to call cli_statement(%s)", get_cli_error_msg(statement)); } if ( (rc = cli_parameter(statement, "%activity_id", cli_int8, &record.activity_id)) != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_parameter(%s)", get_cli_error_msg(rc)); } rc = cli_fetch(statement, cli_for_update); if ( rc < 0 ) { cli_free(statement); return luaL_error(L, "Failed to call cli_fetch(%s)", get_cli_error_msg(rc)); } rc = cli_remove(statement); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_remove(%s)", get_cli_error_msg(rc)); } sqldao dao; dao.sql = (char*)malloc(1000); snprintf(dao.sql, 1000, "delete from tb_activity where activity_id = %ld;", record.activity_id); queue_push(&g_sqlqueue, &dao); rc = cli_free(statement); if (rc != cli_ok) { return luaL_error(L, "Failed to call cli_free(%s)", get_cli_error_msg(rc)); } return 0; }
int tb_activity_insert(lua_State *L) { int statement = cli_statement(g_session, "select * from tb_activity where activity_id = %activity_id"); if ( statement < 0 ) { return luaL_error(L, "Failed to cli_statement(%s)", get_cli_error_msg(statement)); } tb_activity_record record; tb_activity_record &dbrecord = g_dbrecord._tb_activity_record; memset(&record, 0x00, sizeof(record)); int rc; rc = cli_column(statement, "activity_id", cli_int8, NULL, &record.activity_id); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_column(%s) activity_id", get_cli_error_msg(rc)); } rc = cli_column(statement, "activity_name", cli_asciiz, NULL, record.activity_name); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_column(%s) activity_name", get_cli_error_msg(rc)); } if ( (rc = cli_parameter(statement, "%activity_id", cli_int8, &dbrecord.activity_id)) != cli_ok ) { return luaL_error(L, "Failed to call cli_parameter(%s)", get_cli_error_msg(rc)); } rc = cli_fetch(statement, cli_view_only); if ( rc < 0 ) { return luaL_error(L, "Failed to call cli_fetch(%s)", get_cli_error_msg(rc)); } if ( rc != 0 ) { return luaL_error(L, "insert error[tb_activity primary key(%d) already exists]", dbrecord.activity_id); } tb_activity_insert_mdb(L); tb_activity_insert_db(L); return 0; }
int tb_activity_update(lua_State *L) { tb_activity_record &record = g_dbrecord._tb_activity_record; int rc; int statement = cli_statement(g_session, "select * from tb_activity where activity_id = %activity_id"); if (statement < 0) { return luaL_error(L, "Failed to call cli_statement(%s)", get_cli_error_msg(statement)); } tb_activity_record r; memset(&r, 0x00, sizeof(r)); rc = cli_column(statement, "activity_id", cli_int8, NULL, &r.activity_id); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_column(%s) activity_id", get_cli_error_msg(rc)); } rc = cli_column(statement, "activity_name", cli_asciiz, NULL, r.activity_name); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_column(%s) activity_id", get_cli_error_msg(rc)); } if ( (rc = cli_parameter(statement, "%activity_id", cli_int8, &record.activity_id)) != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_parameter(%s)", get_cli_error_msg(rc)); } rc = cli_fetch(statement, cli_for_update); if ( rc < 0 ) { cli_free(statement); return luaL_error(L, "Failed to call cli_fetch(%s)", get_cli_error_msg(rc)); } while ((rc = cli_get_next(statement)) == cli_ok) { r.activity_id = record.activity_id; memcpy(r.activity_name, record.activity_name, sizeof(r.activity_name)); rc = cli_update(statement); if ( rc != cli_ok ) { cli_free(statement); return luaL_error(L, "Failed to call cli_update(%s)", get_cli_error_msg(rc)); } sqldao dao; dao.sql = (char*)malloc(1000); snprintf(dao.sql, 1000, "update tb_activity set activity_name = '%s' where activity_id = %ld;", record.activity_name, record.activity_id); queue_push(&g_sqlqueue, &dao); } rc = cli_free(statement); if (rc != cli_ok) { return luaL_error(L, "Failed to call cli_free(%s)", get_cli_error_msg(rc)); } return 0; }
static void tcp_srv_event(int fd, short events, void *userdata) { struct server_socket *sock = userdata; struct sockaddr_in6 addr; socklen_t addrlen = sizeof(struct sockaddr_in6); struct client *cli = NULL; char host[64]; char port[16]; int cli_fd, on = 1; struct timeval timeout = { CLI_RD_TIMEOUT, 0 }; /* receive TCP connection from kernel */ cli_fd = accept(sock->fd, (struct sockaddr *) &addr, &addrlen); if (cli_fd < 0) { syslogerr("tcp accept"); goto err_out; } srv.stats.tcp_accept++; cli = cli_alloc(cli_fd, &addr, addrlen, true); if (!cli) { applog(LOG_ERR, "OOM"); close(cli_fd); return; } /* mark non-blocking, for upcoming poll use */ if (fsetflags("tcp client", cli->fd, O_NONBLOCK) < 0) goto err_out_fd; /* disable delay of small output packets */ if (setsockopt(cli->fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) < 0) applog(LOG_WARNING, "TCP_NODELAY failed: %s", strerror(errno)); /* turn on TCP keep-alive */ on = 1; if (setsockopt(cli->fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on)) < 0) applog(LOG_WARNING, "SO_KEEPALIVE failed: %s", strerror(errno)); event_set(&cli->ev, cli->fd, EV_READ | EV_PERSIST, tcp_cli_event, cli); /* pretty-print incoming cxn info */ getnameinfo((struct sockaddr *) &cli->addr, addrlen, host, sizeof(host), port, sizeof(port), NI_NUMERICHOST | NI_NUMERICSERV); host[sizeof(host) - 1] = 0; port[sizeof(port) - 1] = 0; applog(LOG_INFO, "client host %s port %s connected%s", host, port, false ? " via SSL" : ""); strcpy(cli->addr_host, host); strcpy(cli->addr_port, port); if (event_add(&cli->ev, &timeout) < 0) { applog(LOG_ERR, "unable to ready cli fd for polling"); goto err_out_fd; } cli->ev_mask = EV_READ; if (!tcp_read(&cli->rst, &cli->ubbp, sizeof(cli->ubbp), cli_read_hdr, NULL)) goto err_out_fd; return; err_out_fd: err_out: cli_free(cli); }
int main() { char_t* databaseName = _T("clitest"); char_t* filePath = _T("clitest2.fdb"); int statement, statement2; int session; int table_created = 0; int rc; size_t i; cli_oid_t oid; person p, p2; memset(&p, 0, sizeof(p)); /* correctly initialize array fields */ memset(&p2, 0, sizeof(p2)); /* correctly initialize array fields */ session = cli_create(databaseName, filePath, 0, 0, 4*1024*1024, 4*1024*1024, 512*1024, 0); if (session < 0) { fprintf(stderr, "cli_open failed with code %d\n", session); return EXIT_FAILURE; } rc = cli_create_table(session, "persons", sizeof(person_descriptor)/sizeof(cli_field_descriptor), person_descriptor); if (rc == cli_ok) { table_created = 1; rc = cli_alter_index(session, "persons", "salary", cli_indexed); if (rc != cli_ok) { fprintf(stderr, "cli_alter_index failed with code %d\n", rc); return EXIT_FAILURE; } rc = cli_alter_index(session, "persons", "name", cli_indexed); if (rc != cli_ok) { fprintf(stderr, "cli_alter_index 2 failed with code %d\n", rc); return EXIT_FAILURE; } } else if (rc != cli_table_already_exists && rc != cli_not_implemented) { fprintf(stderr, "cli_create_table failed with code %d\n", rc); return EXIT_FAILURE; } p.name = "John Smith"; p.salary = 75000; p.address = "1 Guildhall St., Cambridge CB2 3NH, UK"; p.weight = 80.3; p.subordinates.size = 0; rc = cli_insert_struct(session, "persons", &p, &oid); if (rc != cli_ok) { fprintf(stderr, "cli_insert failed with code %d\n", rc); return EXIT_FAILURE; } p.name = "Joe Cooker"; p.salary = 100000; p.address = "Outlook drive, 15/3"; p.weight = 80.3; p.subordinates.size = 1; p.subordinates.data = &oid; rc = cli_insert_struct(session, "persons", &p, &oid); if (rc != cli_ok) { fprintf(stderr, "cli_insert 2 failed with code %d\n", rc); return EXIT_FAILURE; } statement = cli_prepare_query(session, "select * from persons where " "length(subordinates) < %i and salary > %li"); if (statement < 0) { fprintf(stderr, "cli_statement 2 failed with code %d\n", rc); return EXIT_FAILURE; } rc = cli_execute_query(statement, cli_view_only, &p, 2, (cli_int8_t)90000); if (rc != 1) { fprintf(stderr, "cli_fetch 1 returns %d instead of 1\n", rc); return EXIT_FAILURE; } rc = cli_execute_query(statement, cli_for_update, &p, 10, (cli_int8_t)50000); if (rc != 2) { fprintf(stderr, "cli_fetch 2 returns %d instead of 2\n", rc); return EXIT_FAILURE; } statement2 = cli_prepare_query(session, "select * from persons where current = %p"); if (statement2 < 0) { fprintf(stderr, "cli_statement 3 failed with code %d\n", rc); return EXIT_FAILURE; } while ((rc = cli_get_next(statement)) == cli_ok) { printf("%s\t%ld\t%f\t%s\n", p.name, (long)p.salary, p.weight, p.address); if (p.subordinates.size > 0) { printf("Manages:\n"); for (i = 0; i < p.subordinates.size; i++) { rc = cli_execute_query(statement2, cli_view_only, &p2, *((cli_oid_t*)p.subordinates.data + i)); if (rc != 1) { fprintf(stderr, "cli_fetch by oid failed with code %d\n", rc); return EXIT_FAILURE; } if ((rc = cli_get_first(statement2)) != cli_ok) { fprintf(stderr, "cli_get_first failed with code %d\n", rc); return EXIT_FAILURE; } printf("\t%s\n", p2.name); } } p.salary = p.salary*90/100; rc = cli_update(statement); if (rc != cli_ok) { fprintf(stderr, "cli_update failed with code %d\n", rc); return EXIT_FAILURE; } } if (rc != cli_not_found) { fprintf(stderr, "cli_get_next failed with code %d\n", rc); return EXIT_FAILURE; } if ((rc = cli_free(statement)) != cli_ok || (rc = cli_free(statement2)) != cli_ok) { fprintf(stderr, "cli_free 2 failed with code %d\n", rc); return EXIT_FAILURE; } if ((rc = cli_commit(session)) != cli_ok) { fprintf(stderr, "cli_commit failed with code %d\n", rc); return EXIT_FAILURE; } statement = cli_prepare_query(session, "select * from persons order by salary"); if (statement < 0) { fprintf(stderr, "cli_statement 4 failed with code %d\n", rc); return EXIT_FAILURE; } rc = cli_execute_query(statement, cli_for_update, &p); if (rc != 2) { fprintf(stderr, "cli_fetch 4 failed with code %d\n", rc); return EXIT_FAILURE; } printf("New salaries:\n"); while ((rc = cli_get_prev(statement)) == cli_ok) { printf("\t%d\n", (int)p.salary); } if (rc != cli_not_found) { fprintf(stderr, "cli_get_prev failed with code %d\n", rc); return EXIT_FAILURE; } if ((rc = cli_remove(statement)) != cli_ok) { fprintf(stderr, "cli_remove failed with code %d\n", rc); return EXIT_FAILURE; } if ((rc = cli_free(statement)) != cli_ok) { fprintf(stderr, "cli_free 3 failed with code %d\n", rc); return EXIT_FAILURE; } if (table_created) { rc = cli_drop_table(session, "persons"); if (rc != cli_ok) { fprintf(stderr, "cli_drop_table failed with code %d\n", rc); return EXIT_FAILURE; } } if ((rc = cli_close(session)) != cli_ok) { fprintf(stderr, "cli_close failed with code %d\n", rc); return EXIT_FAILURE; } printf("*** CLI test sucessfully passed!\n"); return EXIT_SUCCESS; }