int execute( char * exec_str ) { isc_tr_handle trans = NULL; long status[ 20 ]; if( isc_start_transaction( status, &trans, 1, &db, 0, NULL ) ) ERREXIT( status, 1 ); if( isc_dsql_execute_immediate( status, &db, &trans, 0, exec_str, dialect, NULL ) ) ERREXIT( status, 1 ); if( isc_commit_transaction( status, &trans ) ) ERREXIT( status, 1 ); return 1; }
void IB_Statement::executeImmediate(const IB_STRING sqlString) { if (stmtHandle_) // execute-immediate an open statement throw new IB_SQLException (IB_SQLException::bugCheck__0__, 10007, IB_SQLException::bugCheckException__); if (isc_dsql_execute_immediate (status_->vector(), connection_->dbHandleP(), transaction_->trHandleP(), 0, sqlString, // CJL-IB6 add SQLDialect support, and obsolete sqldaVersion connection_->attachmentSQLDialect_, // sqldaVersion__, // CJL-IB6 end NULL)) throw new IB_SQLException (IB_SQLException::engine__default_0__, status_); }
int main(int argc, char * argv[]) { #if HAVE_PTHREAD_ATTR_GETSTACK pthread_attr_t attr; pthread_attr_init(&attr); void * stackaddr; size_t stacksize; pthread_attr_getstack(&attr, &stackaddr, &stacksize); printf("stackaddr = %p, stacksize = %u\n", stackaddr, stacksize); pthread_attr_destroy(&attr); #endif /* sigset_t signal_set; sigemptyset(&signal_set); sigaddset(&signal_set, SIGHUP); sigaddset(&signal_set, SIGUSR1); sigaddset(&signal_set, SIGUSR2); sigaddset(&signal_set, SIGTERM); sigaddset(&signal_set, SIGINT); sigaddset(&signal_set, SIGQUIT); pthread_sigmask(SIG_BLOCK, &signal_set, NULL);*/ void * fbclient = dlopen("libgds.so", 0); printf("fbclient = %p\n", fbclient); ISC_STATUS status[20]; union { ISC_STATUS ISC_EXPORT (* isc_dsql_execute_immediate)(ISC_STATUS *, isc_db_handle *, isc_tr_handle *, unsigned short, char *, unsigned short, XSQLDA *); void * p0; }; p0 = dlsym(fbclient, "isc_dsql_execute_immediate"); if( p0 != NULL ){ isc_db_handle dbHandle = NULL; isc_tr_handle trHandle = NULL; long r = isc_dsql_execute_immediate(status, &dbHandle, &trHandle, 0, "CREATE DATABASE 'localhost:/usr/local/firebird/MACROSCOPE.FDB' user 'sysdba' password 'masterkey'", 3, NULL); printf("isc_dsql_execute_immediate = %ld, dbHandle = %p, trHandle = %p\n", r, dbHandle, trHandle); union { ISC_STATUS ISC_EXPORT (* isc_detach_database)(ISC_STATUS * status, isc_db_handle * handle); void * p2; }; p2 = dlsym(fbclient, "isc_detach_database"); r = isc_detach_database(status, &dbHandle); printf("isc_detach_database = %ld, dbHandle = %p\n", r, dbHandle); union { ISC_STATUS ISC_EXPORT (* isc_attach_database)(ISC_STATUS * status, short dbNameLen, const char * dbName, isc_db_handle * handle, short dpbLen, const char * dpb); void * p1; }; p1 = dlsym(fbclient, "isc_attach_database"); printf("isc_attach_database = %p\n", p1); char dpb[] = { isc_dpb_version1, isc_dpb_user_name, 6, 'S', 'Y', 'S', 'D', 'B', 'A', isc_dpb_password, 9, 'm', 'a', 's', 't', 'e', 'r', 'k', 'e', 'y' }; r = isc_attach_database(status, 0, "localhost:/usr/local/firebird/MACROSCOPE.FDB", &dbHandle, sizeof(dpb), dpb); printf("isc_attach_database = %ld, dbHandle = %p\n", r, dbHandle); r = isc_detach_database(status, &dbHandle); printf("isc_detach_database = %ld, dbHandle = %p\n", r, dbHandle); } dlclose(fbclient); return 0; }
int main (int argc, char** argv) { char dept_no[4]; double percent_inc; short flag0 = 0, flag1 = 0; XSQLDA *sqlda; long sqlcode; char empdb[128]; if (argc > 1) strcpy(empdb, argv[1]); else strcpy(empdb, "employee.fdb"); if (isc_attach_database(status, 0, empdb, &DB, 0, NULL)) { ERREXIT(status, 1) } /* Allocate an input SQLDA. There are two unknown parameters. */ sqlda = (XSQLDA *) malloc(XSQLDA_LENGTH(2)); sqlda->sqln = 2; sqlda->sqld = 2; sqlda->version = 1; sqlda->sqlvar[0].sqldata = (char *) &percent_inc; sqlda->sqlvar[0].sqltype = SQL_DOUBLE + 1; sqlda->sqlvar[0].sqllen = sizeof(percent_inc); sqlda->sqlvar[0].sqlind = &flag0; flag0 = 0; sqlda->sqlvar[1].sqldata = dept_no; sqlda->sqlvar[1].sqltype = SQL_TEXT + 1; sqlda->sqlvar[1].sqllen = 3; sqlda->sqlvar[1].sqlind = &flag1; flag1 = 0; /* * Get the next department-percent increase input pair. */ while (get_input(dept_no, &percent_inc)) { printf("\nIncreasing budget for department: %s by %5.2lf percent.\n", dept_no, percent_inc); if (isc_start_transaction(status, &trans, 1, &DB, 0, NULL)) { ERREXIT(status, 1) } /* Update the budget. */ isc_dsql_execute_immediate(status, &DB, &trans, 0, updstr, 1, sqlda); sqlcode = isc_sqlcode(status); if (sqlcode) { /* Don't save the update, if the new budget exceeds the limit. */ if (sqlcode == -625) { printf("\tExceeded budget limit -- not updated.\n"); if (isc_rollback_transaction(status, &trans)) { ERREXIT(status, 1) } continue; } /* Undo all changes, in case of an error. */ else { isc_print_status(status); printf("SQLCODE=%d\n", sqlcode); isc_rollback_transaction(status, &trans); ERREXIT(status, 1) } }
/** * This function provides the create class method for Database class. * * @param usused Like it says, not used. * @param file A String containing the name of the primary file for the * database to be created. * @param user The database user that will be used in creating the new * database. * @param password A String containing the password for the user to be used * in creating the database. * @param size The size of pages that will be used by the database. * @param set A String containing the name of the character set to be * used in creating the database. * * @return A reference to a Database object on success, nil on failure. * */ static VALUE createDatabase(int argc, VALUE *argv, VALUE unused) { VALUE database = Qnil, set = Qnil, tmp_str = Qnil; char sql[512] = "", *text = NULL; int value = 1024; isc_db_handle connection = 0; isc_tr_handle transaction = 0; ISC_STATUS status[ISC_STATUS_LENGTH]; /* Check that sufficient parameters have been provided. */ if(argc < 3) { rb_raise(rb_eArgError, "Wrong number of parameters (%d for %d).", argc, 3); } /* Check values that are permitted restricted values. */ if(argc > 3) { value = FIX2INT(argv[3]); if(value != 1024 && value != 2048 && value != 4096 && value != 8192) { rb_raise(rb_eException, "Invalid database page size value . Valid values are 1024, " \ "2048 4096 or 8192."); } } /* Prepare the SQL statement. */ tmp_str = rb_funcall(argv[0], rb_intern("to_s"), 0); sprintf(sql, "CREATE DATABASE '%s'", StringValuePtr(tmp_str)); tmp_str = rb_funcall(argv[1], rb_intern("to_s"), 0); text = StringValuePtr(tmp_str); if(strlen(text) > 0) { strcat(sql, " USER '"); strcat(sql, text); strcat(sql, "'"); } tmp_str = rb_funcall(argv[2], rb_intern("to_s"), 0); text = StringValuePtr(tmp_str); if(strlen(text) > 0) { strcat(sql, " PASSWORD '"); strcat(sql, text); strcat(sql, "'"); } if(argc > 3) { char text[50]; sprintf(text, " PAGE_SIZE = %d", value); strcat(sql, text); } if(argc > 4 && argv[4] != Qnil) { char *text = NULL; set = rb_funcall(argv[4], rb_intern("to_s"), 0); text = StringValuePtr(set); if(strlen(text) > 0) { strcat(sql, " DEFAULT CHARACTER SET "); strcat(sql, text); } } strcat(sql, ";"); if(isc_dsql_execute_immediate(status, &connection, &transaction, 0, sql, 3, NULL) != 0) { rb_fireruby_raise(status, "Database creation error."); } if(connection != 0) { isc_detach_database(status, &connection); } database = rb_database_new(argv[0]); if(set != Qnil) { setDatabaseCharacterSet(database, set); } return(database); }