Esempio n. 1
0
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;
}
Esempio n. 2
0
void free_statement() {
	while ( queue_empty(&g_freestatement) ) {
		int statement = 0;
		queue_pop(&g_freestatement, &statement);
		if ( statement != 0 ) {
			cli_free(statement);
		}
	}
}
Esempio n. 3
0
void
shell_free(Shell *shell) {
    vTaskDelete(shell->task);

    input_free(shell->input);

    cli_free(shell->cli);

    vt102_free(shell->vt102);
}
Esempio n. 4
0
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;
}
Esempio n. 5
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);
}
Esempio n. 6
0
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;
}
Esempio n. 7
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;
}
Esempio n. 8
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;
}
Esempio n. 9
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);
}
Esempio n. 10
0
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;
}