📄 php_fbsql.c
字号:
RETURN_FALSE; } convert_to_string_ex(dbname); name = Z_STRVAL_PP(dbname); break; case 2: if (zend_get_parameters_ex(2, &dbname, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } convert_to_string_ex(dbname); name = Z_STRVAL_PP(dbname); id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); if (!php_fbsql_select_db(name, phpLink TSRMLS_CC)) { RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto int fbsql_change_user(string user, string password [, string database [, resource link_identifier]]) Change the user for a session */PHP_FUNCTION(fbsql_change_user){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **user, **password, **database; int id; char *name = NULL, *userName, *userPassword; char buffer[1024]; switch (ZEND_NUM_ARGS()) { case 2: name = FB_SQL_G(databaseName); id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(2, &user, &password)==FAILURE) { RETURN_FALSE; } break; case 3: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(3, &user, &password, &database)==FAILURE) { RETURN_FALSE; } convert_to_string_ex(database); name = Z_STRVAL_PP(database); break; case 4: if (zend_get_parameters_ex(4, &user, &password, &database, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } convert_to_string_ex(database); name = Z_STRVAL_PP(database); id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(user); userName = Z_STRVAL_PP(user); convert_to_string_ex(password); userPassword = Z_STRVAL_PP(password); if (snprintf(buffer, sizeof(buffer), "SET AUTHORIZATION %s;", userName) < 0) { RETURN_FALSE; } phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, buffer, phpLink); if (Z_LVAL_P(return_value)) { free(phpLink->userName); phpLink->userName = strdup(userName); }}/* }}} *//* {{{ proto bool fbsql_create_db(string database_name [, resource link_identifier]) Create a new database on the server */PHP_FUNCTION(fbsql_create_db){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; int i, status; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status != FBUnknownStatus) { char* txt = "Unknown status"; if (status == FBStopped ) txt = "stopped"; else if (status == FBStarting) txt = "starting"; else if (status == FBRunning ) txt = "running"; else if (status == FBStopping) txt = "stopping"; else if (status == FBNoExec ) txt = "no exec"; if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create %s@%s, database is %s", databaseName, phpLink->hostName, txt); RETURN_FALSE; } if (!fbcehCreateDatabaseNamedWithOptions(phpLink->execHandler, databaseName, "")) { char* error = fbechErrorMessage(phpLink->execHandler); if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create %s@%s. %s", databaseName, phpLink->hostName, error); RETURN_FALSE; } for (i=0; i < 20; i++) {#ifdef PHP_WIN32 Sleep(1000);#else sleep(1);#endif status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status == FBRunning) break; } if (status != FBRunning) { if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s created -- status unknown", databaseName, phpLink->hostName); RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto int fbsql_drop_db(string database_name [, resource link_identifier]) Drop a database on the server */PHP_FUNCTION(fbsql_drop_db){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; int i, status; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status != FBStopped) { char* txt = "Unknown status"; if (status == FBStopped ) txt = "stopped"; else if (status == FBUnknownStatus) txt = "nonexisting"; else if (status == FBStarting ) txt = "starting"; else if (status == FBRunning ) txt = "running"; else if (status == FBStopping ) txt = "stopping"; else if (status == FBNoExec ) txt = "no exec"; if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not drop %s@%s, database is %s", databaseName, phpLink->hostName, txt); RETURN_FALSE; } if (! fbcehDeleteDatabaseNamed (phpLink->execHandler, databaseName)) { char* error = fbechErrorMessage(phpLink->execHandler); if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not drop %s@%s. %s", databaseName, phpLink->hostName, error); RETURN_FALSE; } for (i=0; i < 20; i++) {#ifdef PHP_WIN32 Sleep(1000);#else sleep(1);#endif status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status == FBUnknownStatus) break; } if (status != FBUnknownStatus) { if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s dropped -- status unknown", databaseName, phpLink->hostName); RETURN_FALSE; }}/* }}} *//* {{{ proto bool fbsql_start_db(string database_name [, resource link_identifier]) Start a database on the server */PHP_FUNCTION(fbsql_start_db){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; int i, status; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if ((status != FBStopped) && (status != FBRunning) && (status != FBStarting)) { char* txt = "Unknown status"; if (status == FBStopped ) txt = "stopped"; else if (status == FBStarting) txt = "starting"; else if (status == FBRunning ) txt = "running"; else if (status == FBStopping) txt = "stopping"; else if (status == FBNoExec ) txt = "no exec"; if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not start %s@%s, as database is %s", databaseName, phpLink->hostName, txt); RETURN_FALSE; } if (status == FBStopped) { if (!fbcehStartDatabaseNamed (phpLink->execHandler, databaseName)) { char* error = fbechErrorMessage(phpLink->execHandler); if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not start %s@%s. %s", databaseName, phpLink->hostName, error); RETURN_FALSE; } } for (i=0; i < 20; i++) {#ifdef PHP_WIN32 Sleep(1000);#else sleep(1);#endif status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status == FBRunning) break; } if (status != FBRunning) { if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s started -- status unknown", databaseName, phpLink->hostName); RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto bool fbsql_stop_db(string database_name [, resource link_identifier]) Stop a database on the server */PHP_FUNCTION(fbsql_stop_db){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; int i, status; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) { RETURN_FALSE; }/* printf("Stop db %x\n", phpDatabase->connection); */ if (!fbcdcStopDatabase(phpLink->connection)) { if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot stop database %s@%s", databaseName, phpLink->hostName); RETURN_FALSE; } for (i=0; i < 20; i++) { status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status == FBStopped) break;#ifdef PHP_WIN32 Sleep(1000);#else sleep(1);#endif } RETURN_TRUE;}/* }}} *//* {{{ proto int fbsql_db_status(string database_name [, resource link_identifier]) Gets the status (Stopped, Starting, Running, Stopping) for a given database */PHP_FUNCTION(fbsql_db_status){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); if (phpLink->execHandler) { RETURN_LONG(fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName)); } else { RETURN_FALSE; }}/* }}} *//* {{{ mdOk */int mdOk(PHPFBLink* link, FBCMetaData* md, char* sql){ FBCDatabaseConnection* c = link->connection; int result = 1; TSRMLS_FETCH(); link->errorNo = 0; if (link->errorText) { free(link->errorText); link->errorText = NULL; } if (md == NULL) { link->errorNo = 1; link->errorText = strdup("Connection to database server was lost"); if (FB_SQL_G(generateWarnings)) php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", link->errorText); result = 0; } else if (fbcmdErrorsFound(md)) { FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md); char* emg = fbcemdAllErrorMessages(emd); if (FB_SQL_G(generateWarnings)) { if (emg) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in statement: '%s' %s", sql, emg); else php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message"); } link->errorText = strdup(emg); link->errorNo = fbcemdErrorCodeAtIndex(emd, 0); free(emg); fbcemdRelease(emd);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -