23 define(
"DBTYPE_INTEGER",
"integer");
24 define(
"DBTYPE_SERIAL",
"serial");
25 define(
"DBTYPE_SMALLINT",
"smallint");
26 define(
"DBTYPE_BIGINT",
"bigint");
27 define(
"DBTYPE_NUMERIC",
"numeric");
28 define(
"DBTYPE_BOOLEAN",
"boolean");
29 define(
"DBTYPE_CHAR",
"char");
30 define(
"DBTYPE_VARCHAR",
"varchar");
31 define(
"DBTYPE_DATE",
"date");
32 define(
"DBTYPE_TIMESTAMPTZ",
"timestamptz");
33 define(
"DBTYPE_TIMESTAMP",
"timestamp");
36 define(
"DBTYPE_CUSTOM_EXPRESSION",
"expression");
38 define(
"DBTIMESTAMP_USENOW",
"now");
40 define(
"DBTIMESTAMP_USETS",
"current_timestamp");
41 define(
"DBNULL",
"null");
43 define (
"HOMECU_WORK_BEGIN",
"BEGIN");
44 define (
"HOMECU_WORK_COMMIT",
"COMMIT");
45 define (
"HOMECU_WORK_ROLLBACK",
"ROLLBACK");
49 function db_connect($pDbEnvSettings) {
51 $connString =
"user=" . HCU_array_key_value(
'user', $pDbEnvSettings) .
52 " password=" . HCU_array_key_value(
'password', $pDbEnvSettings) .
53 " port=" . HCU_array_key_value(
'port', $pDbEnvSettings) .
54 " dbname=" . HCU_array_key_value(
'dbname', $pDbEnvSettings) .
55 " host=" . HCU_array_key_value(
'host', $pDbEnvSettings) ;
60 $retConn = @pg_connect($connString);
84 function db_pconnect($pDbEnvSettings) {
86 $connString =
"user=" . HCU_array_key_value(
'user', $pDbEnvSettings) .
87 " password=" . HCU_array_key_value(
'password', $pDbEnvSettings) .
88 " port=" . HCU_array_key_value(
'port', $pDbEnvSettings) .
89 " dbname=" . HCU_array_key_value(
'dbname', $pDbEnvSettings) .
90 " host=" . HCU_array_key_value(
'host', $pDbEnvSettings) ;
94 $retConn = @pg_pconnect($connString);
99 function db_query($qstring,$qhandle) {
101 return @pg_query ($qhandle, $qstring);
107 function db_num_rows($qhandle) {
109 return @pg_num_rows($qhandle);
115 function db_result($qhandle,$row,$field) {
117 return @pg_result($qhandle,$row,$field);
123 function db_num_fields($qhandle) {
125 return @pg_numfields($qhandle);
131 function db_fieldname($qhandle,$fnumber) {
133 return @pg_fieldname($qhandle,$fnumber);
139 function db_affected_rows($qhandle) {
142 return @pg_affected_rows($qhandle);
148 function db_fetch_array($qhandle, $row=
null) {
150 return @pg_fetch_array($qhandle,$row);
155 function db_fetch_assoc($qhandle, $row=
null) {
158 return @pg_fetch_assoc($qhandle,$row);
165 function db_fetch_object($qhandle,$row=
null) {
167 return @pg_fetch_object($qhandle,$row);
173 function db_fetch_row($qhandle,$row=
null) {
175 return @pg_fetch_row($qhandle,$row);
181 function db_fetch_all($qhandle) {
184 return @pg_fetch_all($qhandle);
188 function db_insert_id($qhandle) {
192 return @pg_getlastoid($qhandle);
198 function db_error() {
199 return @pg_errormessage();
202 function db_last_error() {
203 return @pg_last_error();
206 function db_free_result($qhandle) {
208 return @pg_freeresult($qhandle);
214 function db_cant_exist($sql, $qhandle) {
217 $keycheck=db_query($sql, $qhandle);
219 if(@pg_num_rows($keycheck) == 0) {$result = 1;}
231 function db_connection_status($qhandle) {
234 $retStatus = pg_connection_status($qhandle);
255 function db_transaction_status($pDbh) {
258 if (db_connection_status($pDbh) === PGSQL_CONNECTION_OK) {
259 return pg_transaction_status($pDbh);
280 function db_work ($pDbh, $pWorkType) {
282 switch ($pWorkType) {
283 case HOMECU_WORK_BEGIN:
284 $sql =
"BEGIN WORK;";
286 case HOMECU_WORK_COMMIT:
287 $sql =
"COMMIT WORK;";
289 case HOMECU_WORK_ROLLBACK:
290 $sql =
"ROLLBACK WORK;";
297 if ($pWorkType == HOMECU_WORK_BEGIN) {
298 $workRs = db_query($sql, $pDbh);
305 $transStatus = db_transaction_status($pDbh);
306 if ($transStatus === PGSQL_TRANSACTION_ACTIVE || $transStatus === PGSQL_TRANSACTION_INTRANS) {
307 $workRs = db_query($sql, $pDbh);
320 $retVal = ($pWorkType == HOMECU_WORK_COMMIT ? true :
false);
328 function db_must_exist($sql, $qhandle) {
330 $keycheck = db_query($sql, $qhandle);
332 if(@pg_num_rows($keycheck) > 0) {$result = 1;}
337 function prep_save($text, $msize=0) {
345 $text = substr($text, 0, $msize);
347 $text = pg_escape_string(trim($text));
362 function db_build_expr_value($pValue, $pColAttr) {
365 if (is_array($pColAttr)) {
367 switch (HCU_array_key_value(
'type', $pColAttr)) {
369 $retStr = intval($pValue);
374 case DBTYPE_SMALLINT:
376 $retStr = (is_null($pValue) || trim($pValue) ==
"") && HCU_array_key_value(
'nullable', $pColAttr) ? DBNULL : intval($pValue);
382 $precision = explode(
',', HCU_array_key_value(
'precision', $pColAttr));
383 $decimals = ((count($precision) > 1) ? intval($precision[1]) : 0);
384 $retStr = (is_null($pValue) || trim($pValue) ==
"") && HCU_array_key_value(
'nullable', $pColAttr) ? DBNULL : number_format(floatval($pValue), $decimals,
'.',
'');
388 $retStr =
"'" . prep_save($pValue, intval(HCU_array_key_value(
'maxlength', $pColAttr))) .
"'";
390 case DBTYPE_CUSTOM_EXPRESSION:
391 $retStr = prep_save($pValue);
393 case DBTYPE_TIMESTAMP:
394 case DBTYPE_TIMESTAMPTZ:
398 if ($pValue == DBTIMESTAMP_USENOW) {
400 } elseif ($pValue == DBTIMESTAMP_USETS) {
401 $retStr =
" clock_timestamp() ";
402 } elseif ($pValue ==
'') {
406 $retStr =
"'" . prep_save($pValue) .
"'";
410 $retStr= $pValue ===
true ?
"TRUE" : ($pValue ===
false ?
"FALSE" :
"");
413 $nullable= HCU_array_key_value(
'nullable', $pColAttr);
414 $pValue= is_null($pValue) ?
"" : trim(strtolower($pValue));
415 $retStr= $pValue ==
"" ? ($nullable ? DBNULL :
"FALSE")
416 : (in_array($pValue, array(
"true",
"t",
"y",
"yes",
"1")) ?
"TRUE" :
417 (in_array($pValue, array(
"false",
"f",
"n",
"no",
"0")) ?
"FALSE" : ($nullable ? DBNULL :
"FALSE")));
437 function GetAllRowsFromSql($pDbh, $pSql) {
445 if (db_connection_status($pDbh) == PGSQL_CONNECTION_BAD) {
446 throw new exception(
"Database Status Error",
"901");
449 $dbResults = db_query($pSql, $pDbh);
451 if ($dbResults !==
false) {
452 $retRows = db_fetch_all($dbResults);
454 throw new exception(db_last_error(),
"902");
458 }
catch (exception $e) {