ZEND_GET_MODULE(fbsql)
#endif
-#define CHECK_LINK(link) { if (link==-1) { php_error(E_WARNING, "FrontBase: A link to the server could not be established"); RETURN_FALSE; } }
+#define CHECK_LINK(link) { \
+ if (link==-1) { \
+ if (FB_SQL_G(generateWarnings)) \
+ php_error(E_WARNING, "FrontBase: A link to the server could not be established"); \
+ RETURN_FALSE; \
+ } \
+}
static void phpfbReleaseResult (zend_rsrc_list_entry *rsrc TSRMLS_DC);
static void phpfbReleaseLink (zend_rsrc_list_entry *rsrc TSRMLS_DC);
if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks)))
{
- php_error(E_WARNING, "FrontBase link limit %d exceeded ", FB_SQL_G(maxLinks));
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "FrontBase link limit %d exceeded ", FB_SQL_G(maxLinks));
RETURN_FALSE;
}
if ((FB_SQL_G(maxPersistant) != -1 && FB_SQL_G(persistantCount) == FB_SQL_G(maxPersistant)))
{
- php_error(E_WARNING, "FrontBase persistant link limit %d exceeded ", FB_SQL_G(maxPersistant));
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "FrontBase persistant link limit %d exceeded ", FB_SQL_G(maxPersistant));
RETURN_FALSE;
}
if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks)))
{
- php_error(E_WARNING, "FrontBase link limit %d exceeded ", FB_SQL_G(maxLinks));
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "FrontBase link limit %d exceeded ", FB_SQL_G(maxLinks));
RETURN_FALSE;
}
c = fbcdcConnectToDatabase(databaseName, link->hostName, link->databasePassword);
if (c == NULL)
{
- php_error(E_WARNING, fbcdcClassErrorMessage());
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, fbcdcClassErrorMessage());
return 0;
}
md = fbcdcCreateSession(c, "PHP", link->userName, link->userPassword, link->userName);
{
FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md);
char* emg = fbcemdAllErrorMessages(emd);
- if (emg)
- php_error(E_WARNING, emg);
- else
- php_error(E_WARNING, "No message");
+ if (FB_SQL_G(generateWarnings))
+ {
+ if (emg)
+ php_error(E_WARNING, emg);
+ else
+ php_error(E_WARNING, "No message");
+ }
+ link->errorText = strdup(emg);
+ link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);;
free(emg);
fbcemdRelease(emd);
fbcmdRelease(md);
{
int port = atoi(name);
if (port == 0 || port > 64535) {
- php_error(E_WARNING, "Cannot connect to FBExec for database '%s'", name);
- php_error(E_WARNING, fbcehClassErrorMessage());
+ if (FB_SQL_G(generateWarnings)) {
+ php_error(E_WARNING, "Cannot connect to FBExec for database '%s'", name);
+ php_error(E_WARNING, fbcehClassErrorMessage());
+ }
RETURN_FALSE;
}
}
else if (status == FBRunning ) txt = "running";
else if (status == FBStopping) txt = "stopping";
else if (status == FBNoExec ) txt = "no exec";
- php_error(E_WARNING, "Could not create %s@%s, database is %s", databaseName, phpLink->hostName, txt);
+ if (FB_SQL_G(generateWarnings))
+ php_error(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);
- php_error(E_WARNING, "Could not create %s@%s. %s.", databaseName, phpLink->hostName, error);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Could not create %s@%s. %s.", databaseName, phpLink->hostName, error);
RETURN_FALSE;
}
for (i=0; i < 20; i++)
}
if (status != FBRunning)
{
- php_error(E_WARNING, "Database %s@%s created -- status unknown", databaseName, phpLink->hostName);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Database %s@%s created -- status unknown", databaseName, phpLink->hostName);
RETURN_FALSE;
}
RETURN_TRUE;
else if (status == FBRunning ) txt = "running";
else if (status == FBStopping ) txt = "stopping";
else if (status == FBNoExec ) txt = "no exec";
- php_error(E_WARNING, "Could not drop %s@%s, database is %s.", databaseName, phpLink->hostName, txt);
+ if (FB_SQL_G(generateWarnings))
+ php_error(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);
- php_error(E_WARNING, "Could not drop %s@%s. %s.", databaseName, phpLink->hostName, error);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Could not drop %s@%s. %s.", databaseName, phpLink->hostName, error);
RETURN_FALSE;
}
for (i=0; i < 20; i++)
}
if (status != FBUnknownStatus)
{
- php_error(E_WARNING, "Database %s@%s dropped -- status unknown", databaseName, phpLink->hostName);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Database %s@%s dropped -- status unknown", databaseName, phpLink->hostName);
RETURN_FALSE;
}
}
else if (status == FBRunning ) txt = "running";
else if (status == FBStopping) txt = "stopping";
else if (status == FBNoExec ) txt = "no exec";
- php_error(E_WARNING, "Could not start %s@%s, as database is %s.", databaseName, phpLink->hostName, txt);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Could not start %s@%s, as database is %s.", databaseName, phpLink->hostName, txt);
RETURN_FALSE;
}
if (!fbcehStartDatabaseNamed (phpLink->execHandler, databaseName))
{
char* error = fbechErrorMessage(phpLink->execHandler);
- php_error(E_WARNING, "Could not start %s@%s. %s.", databaseName, phpLink->hostName, error);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Could not start %s@%s. %s.", databaseName, phpLink->hostName, error);
RETURN_FALSE;
}
}
}
if (status != FBRunning)
{
- php_error(E_WARNING, "Database %s@%s started -- status unknown", databaseName, phpLink->hostName);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Database %s@%s started -- status unknown", databaseName, phpLink->hostName);
RETURN_FALSE;
}
RETURN_TRUE;
/* printf("Stop db %x\n", phpDatabase->connection); */
if (!fbcdcStopDatabase(phpLink->connection))
{
- php_error(E_WARNING, "Cannot stop database %s@%s", databaseName, phpLink->hostName);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Cannot stop database %s@%s", databaseName, phpLink->hostName);
RETURN_FALSE;
}
php_error(E_WARNING, "No message");
}
link->errorText = strdup(emg);
- link->errorNo = 1;
+ link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);;
free(emg);
fbcemdRelease(emd);
result = 0;
break;
default:
- php_error(E_WARNING, "Unimplemented type");
+ php_error(E_ERROR, "Unimplemented type");
break;
}
}
}
else if (!phpfbFetchRow(result, rowIndex))
{
- php_error(E_WARNING, "No such row %d in result set %d", rowIndex, rowIndex);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "No such row %d in result set %d", rowIndex, rowIndex);
RETURN_FALSE;
}
else if (columnIndex >= result->columnCount)
{
- php_error(E_WARNING, "No such column %d in result set %d", columnIndex, rowIndex);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "No such column %d in result set %d", columnIndex, rowIndex);
RETURN_FALSE;
}
else
columnIndex = Z_LVAL_PP(field);
if (columnIndex < 0)
{
- php_error(E_WARNING, "Illegal column index - %d", columnIndex);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Illegal column index - %d", columnIndex);
RETURN_FALSE;
}
}
}
/* }}} */
+static void _parse_list(zval** return_value, FBCPList* list)
+{
+ int count = fbcplCount(list);
+ int i,j;
+
+ for (i=0; i<count; i++)
+ {
+ char* key = (char*)fbcplKeyAtIndex(list, i);
+ FBCPList* value = (FBCPList*)fbcplValueForKey(list, key);
+ if (fbcplIsDictionary(value))
+ {
+ zval *value_array;
+
+ MAKE_STD_ZVAL(value_array);
+ array_init(value_array);
+
+ _parse_list(&value_array, value);
+ add_assoc_zval(*return_value, key, value_array);
+ }
+ else if (fbcplIsArray(value))
+ {
+ zval *value_array;
+ int valcount = fbcplCount(value);
+
+ MAKE_STD_ZVAL(value_array);
+ array_init(value_array);
+
+ for (j=0; j<valcount; j++)
+ {
+ FBCPList* arrayValue = (FBCPList*)fbcplValueAtIndex(value, j);
+ if (fbcplIsString(arrayValue))
+ add_index_string(value_array, j, (char*)fbcplString(arrayValue), 1);
+ else {
+ _parse_list(&value_array, arrayValue);
+ }
+ }
+ add_assoc_zval(*return_value, key, value_array);
+ }
+ else if (fbcplIsString(value)) {
+ add_assoc_string(*return_value, key, (char*)fbcplString(value), 1);
+ }
+ }
+}
+
static void php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
{
rowIndex = result->rowIndex;
if (((result_type & FBSQL_NUM) != FBSQL_NUM) && ((result_type & FBSQL_ASSOC) != FBSQL_ASSOC))
{
- php_error(E_WARNING, "Illegal result type use FBSQL_NUM, FBSQL_ASSOC, or FBSQL_BOTH.");
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Illegal result type use FBSQL_NUM, FBSQL_ASSOC, or FBSQL_BOTH.");
RETURN_FALSE;
}
if (array_init(return_value)==FAILURE)
}
if (result->fetchHandle == NULL)
{
- if (result->array == NULL)
+ if (result->array == NULL && result->list == NULL)
{
RETURN_FALSE;
}
{
RETURN_FALSE;
}
- if (result_type & FBSQL_NUM)
- {
- add_index_string(return_value, 0, estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0);
+ if (result->list) {
+ char* key;
+ FBCPList* value;
+
+ if (result->rowCount == 0 || result->rowIndex >= result->rowCount) {
+ RETURN_FALSE;
+ }
+
+ value = (FBCPList*)fbcplValueAtIndex(result->list, result->rowIndex);
+ key = (char*)fbcplKeyAtIndex(result->list, result->rowIndex);
+ if (key && key[0] == 2)
+ key = NULL;
+
+ if (fbcplIsDictionary(value)) {
+ zval *value_array;
+
+ MAKE_STD_ZVAL(value_array);
+ array_init(value_array);
+
+ _parse_list(&value_array, value);
+ if (result_type & FBSQL_NUM || key == NULL)
+ {
+ add_index_zval(return_value, 0, value_array);
+ }
+ if (result_type & FBSQL_ASSOC && key != NULL)
+ {
+ add_assoc_zval(return_value, key, value_array);
+ }
+ }
+ else if (fbcplIsArray(value)) {
+ zval *value_array;
+ int valcount = fbcplCount(value);
+ int j;
+
+ MAKE_STD_ZVAL(value_array);
+ array_init(value_array);
+
+ for (j=0; j<valcount; j++)
+ {
+ FBCPList* arrayValue = (FBCPList*)fbcplValueAtIndex(value, j);
+ if (fbcplIsString(arrayValue))
+ add_index_string(value_array, j, (char*)fbcplString(arrayValue), 1);
+ else {
+ _parse_list(&value_array, arrayValue);
+ }
+ }
+ if (result_type & FBSQL_NUM || key == NULL)
+ {
+ add_index_zval(return_value, 0, value_array);
+ }
+ if (result_type & FBSQL_ASSOC && key != NULL)
+ {
+ add_assoc_zval(return_value, key, value_array);
+ }
+ }
+ else if (fbcplIsString(value)) {
+ if (result_type & FBSQL_NUM)
+ {
+ add_index_string(return_value, 0, (char*)fbcplString(value), 1);
+ }
+ if (result_type & FBSQL_ASSOC)
+ {
+ add_assoc_string(return_value, key, (char*)fbcplString(value), 1);
+ }
+ }
}
- if (result_type & FBSQL_ASSOC)
- {
- add_assoc_string(return_value, "Database", estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0);
+ else {
+ if (result_type & FBSQL_NUM)
+ {
+ add_index_string(return_value, 0, estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0);
+ }
+ if (result_type & FBSQL_ASSOC)
+ {
+ add_assoc_string(return_value, "Database", estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0);
+ }
}
}
else {
if (rowIndex < 0)
{
- php_error(E_WARNING, "Illegal row_index (%i)", rowIndex);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "Illegal row_index (%i)", rowIndex);
RETURN_FALSE;
}
column = Z_LVAL_PP(field_index);
if (column < 0 || column >= result->columnCount)
{
- php_error(E_WARNING, "%d no such column in result", column);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "%d no such column in result", column);
RETURN_FALSE;
}
}
column = Z_LVAL_PP(field_index);
if (column < 0 || column >= result->columnCount)
{
- php_error(E_WARNING, "%d no such column in result", column);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "%d no such column in result", column);
RETURN_FALSE;
}
}
column = Z_LVAL_PP(field_index);
if (column < 0 || column >= result->columnCount)
{
- php_error(E_WARNING, "%d no such column in result", column);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "%d no such column in result", column);
RETURN_FALSE;
}
}
column = Z_LVAL_PP(field_index);
if (column < 0 || column >= result->columnCount)
{
- php_error(E_WARNING, "%d no such column in result", column);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "%d no such column in result", column);
RETURN_FALSE;
}
}
column = Z_LVAL_PP(field_index);
if (column < 0 || column >= result->columnCount)
{
- php_error(E_WARNING, "%d no such column in result", column);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "%d no such column in result", column);
RETURN_FALSE;
}
}
column = Z_LVAL_PP(field_index);
if (column < 0 || column >= result->columnCount)
{
- php_error(E_WARNING, "%d no such column in result", column);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "%d no such column in result", column);
RETURN_FALSE;
}
}
column = Z_LVAL_PP(field_index);
if (column < 0 || column >= result->columnCount)
{
- php_error(E_WARNING, "%d no such column in result", column);
+ if (FB_SQL_G(generateWarnings))
+ php_error(E_WARNING, "%d no such column in result", column);
RETURN_FALSE;
}
}