diff --git a/phpgwapi/inc/class.db.inc.php b/phpgwapi/inc/class.db.inc.php index 08214b2a55..910fbcb922 100644 --- a/phpgwapi/inc/class.db.inc.php +++ b/phpgwapi/inc/class.db.inc.php @@ -432,7 +432,7 @@ * Move to position in result set * * @param int $pos required row (optional), default first row - * @return int 1 if sucessful or 0 if not found + * @return boolean true if sucessful or false if not found */ function seek($pos = 0) { @@ -449,7 +449,7 @@ /** * Begin Transaction * - * @return int current transaction id + * @return int/boolean current transaction-id, of false if no connection */ function transaction_begin() { @@ -884,7 +884,7 @@ * * Example: $db->concat($db->quote('Hallo '),'username') would return * for mysql "concat('Hallo ',username)" or "'Hallo ' || username" for postgres - * @param $str1 string already quoted stringliteral or column-name, variable number of arguments + * @param string $str1 already quoted stringliteral or column-name, variable number of arguments * @return string to be used in a query */ function concat($str1) @@ -938,17 +938,17 @@ * * Please note that the quote function already returns necessary quotes: quote('Hello') === "'Hello'". * Int and Auto types are casted to int: quote('1','int') === 1, quote('','int') === 0, quote('Hello','int') === 0 - * Unset php-variables and those set to NULL are now returned as SQL NULL! If this is not desired, set them to ''. * - * @param $value mixed the value to be escaped - * @param $type string the type of the db-column, default False === varchar + * @param mixed $value the value to be escaped + * @param string/boolean $type string the type of the db-column, default False === varchar + * @param boolean $not_null is column NOT NULL, default true, else php null values are written as SQL NULL * @return string escaped sting */ - function quote($value,$type=False) + function quote($value,$type=False,$not_null=true) { if ($this->Debug) echo "

db::quote('$value','$type')

\n"; - if (is_null($value)) // writing unset php-variables and thouse set to NULL now as SQL NULL + if (!$not_null && is_null($value)) // writing unset php-variables and thouse set to NULL now as SQL NULL { return 'NULL'; } @@ -984,20 +984,21 @@ * * @author RalfBeckeroutdoor-training.de * - * @param $glue string in most cases this will be either ',' or ' AND ', depending you your query - * @param $array array column-name / value pairs, if the value is an array all its array-values will be quoted + * @param string $glue in most cases this will be either ',' or ' AND ', depending you your query + * @param array $array column-name / value pairs, if the value is an array all its array-values will be quoted * according to the type of the column, and the whole array with be formatted like (val1,val2,...) * If $use_key == True, an ' IN ' instead a '=' is used. Good for category- or user-lists. * If the key is numerical (no key given in the array-definition) the value is used as is, eg. * array('visits=visits+1') gives just "visits=visits+1" (no quoting at all !!!) - * @param $use_key boolean/string If $use_key===True a "$key=" prefix each value (default), typically set to False + * @param boolean/string $use_key If $use_key===True a "$key=" prefix each value (default), typically set to False * or 'VALUES' for insert querys, on 'VALUES' "(key1,key2,...) VALUES (val1,val2,...)" is returned - * @param $only array/boolean if set to an array only colums which are set (as data !!!) are written + * @param array/boolean $only if set to an array only colums which are set (as data !!!) are written * typicaly used to form a WHERE-clause from the primary keys. * If set to True, only columns from the colum_definitons are written. - * @param $column_definitions array/boolean this can be set to the column-definitions-array + * @param array/boolean $column_definitions this can be set to the column-definitions-array * of your table ($tables_baseline[$table]['fd'] of the setup/tables_current.inc.php file). * If its set, the column-type-data determinates if (int) or addslashes is used. + * @return string SQL */ function column_data_implode($glue,$array,$use_key=True,$only=False,$column_definitions=False) { @@ -1024,12 +1025,13 @@ $this->halt("db::column_data_implode('$glue',".print_r($array,True).",'$use_key',".print_r($only,True).",
".print_r($column_definitions,True)."
nothing known about column '$key'!"); } $column_type = is_array($column_definitions) ? @$column_definitions[$key]['type'] : False; + $not_null = is_array($column_definitions) && isset($column_definitions[$key]['nullable']) ? !$column_definitions[$key]['nullable'] : True; if (is_array($data)) { foreach($data as $k => $v) { - $data[$k] = $this->quote($v,$column_type); + $data[$k] = $this->quote($v,$column_type,$not_null); } $values[] = ($use_key===True ? $key.' IN ' : '') . '('.implode(',',$data).')'; } @@ -1039,7 +1041,7 @@ } else { - $values[] = ($use_key===True ? $this->name_quote($key) . '=' : '') . $this->quote($data,$column_type); + $values[] = ($use_key===True ? $this->name_quote($key) . '=' : '') . $this->quote($data,$column_type,$not_null); } } } @@ -1052,7 +1054,7 @@ * * @author RalfBeckeroutdoor-training.de * - * @param $column_definitions array/boolean this can be set to the column-definitions-array + * @param array/boolean $column_definitions this can be set to the column-definitions-array * of your table ($tables_baseline[$table]['fd'] of the setup/tables_current.inc.php file). * If its set, the column-type-data determinates if (int) or addslashes is used. */ @@ -1061,6 +1063,14 @@ $this->column_definitions=$column_definitions; } + /** + * Sets the application in which the db-class looks for table-defintions + * + * Used by table_definitions, insert, update, select, expression and delete. If the app is not set via set_app, + * it need to be set for these functions on every call + * + * @param string $app the app-name + */ function set_app($app) { $this->app = $app; @@ -1073,8 +1083,8 @@ * * @author RalfBeckeroutdoor-training.de * - * @param $app bool/string name of the app or default False to use the app set by db::set_app or the current app - * @param $table bool/string if set return only defintions of that table, else return all defintions + * @param bool/string $app name of the app or default False to use the app set by db::set_app or the current app + * @param bool/string $table if set return only defintions of that table, else return all defintions * @return mixed array with table-defintions or False if file not found */ function get_table_definitions($app=False,$table=False) @@ -1110,14 +1120,14 @@ * * @author RalfBeckeroutdoor-training.de * - * @param $table string name of the table - * @param $data array with column-name / value pairs - * @param $where mixed array with column-name / values pairs to check if a row with that keys already exists, + * @param string $table name of the table + * @param array $data with column-name / value pairs + * @param mixed $where string with where clause or array with column-name / values pairs to check if a row with that keys already exists, or false for an unconditional insert * if the row exists db::update is called else a new row with $date merged with $where gets inserted (data has precedence) - * @param $line int line-number to pass to query - * @param $file string file-name to pass to query - * @param $app mixed string with name of app or False to use the current-app - * @return object/boolean Query_ID of the call to db::query, or True if we had to do an update + * @param int $line line-number to pass to query + * @param string $file file-name to pass to query + * @param string/boolean $app string with name of app or False to use the current-app + * @return ADORecordSet or false, if the query fails */ function insert($table,$data,$where,$line,$file,$app=False) { @@ -1153,13 +1163,13 @@ * * @author RalfBeckeroutdoor-training.de * - * @param $table string name of the table - * @param $data array with column-name / value pairs - * @param $where array column-name / values pairs and'ed together for the where clause - * @param $line int line-number to pass to query - * @param $file string file-name to pass to query - * @param $app mixed string with name of app or False to use the current-app - * @return the return-value of the call to db::query + * @param string $table name of the table + * @param array $data with column-name / value pairs + * @param array $where column-name / values pairs and'ed together for the where clause + * @param int $line line-number to pass to query + * @param string $file file-name to pass to query + * @param string/boolean $app string with name of app or False to use the current-app + * @return ADORecordSet or false, if the query fails */ function update($table,$data,$where,$line,$file,$app=False) { @@ -1198,12 +1208,12 @@ * * @author RalfBeckeroutdoor-training.de * - * @param $table string name of the table - * @param $where array column-name / values pairs and'ed together for the where clause - * @param $line int line-number to pass to query - * @param $file string file-name to pass to query - * @param $app mixed string with name of app or False to use the current-app - * @return the return-value of the call to db::query + * @param string $table name of the table + * @param array $where column-name / values pairs and'ed together for the where clause + * @param int $line line-number to pass to query + * @param string $file file-name to pass to query + * @param string/boolean $app string with name of app or False to use the current-app + * @return ADORecordSet or false, if the query fails */ function delete($table,$where,$line,$file,$app=False) { @@ -1266,17 +1276,18 @@ * * @author RalfBeckeroutdoor-training.de * - * @param $table string name of the table - * @param $cols mixed string or array of column-names / select-expressions - * @param $where array/string string or array with column-name / values pairs AND'ed together for the where clause - * @param $line int line-number to pass to query - * @param $file string file-name to pass to query - * @param $offset int/bool offset for a limited query or False (default) + * @param string $table name of the table + * @param array/string $cols string or array of column-names / select-expressions + * @param array/string $where string or array with column-name / values pairs AND'ed together for the where clause + * @param int $line line-number to pass to query + * @param string $file file-name to pass to query + * @param int/bool $offset offset for a limited query or False (default) * @param string $append string to append to the end of the query, eg. ORDER BY ... - * @param $app mixed string with name of app or False to use the current-app - * @return the return-value of the call to db::query + * @param string/boolean $app string with name of app or False to use the current-app + * @param int $num_rows number of rows to return if offset set, default 0 = use default in user prefs + * @return ADORecordSet or false, if the query fails */ - function select($table,$cols,$where,$line,$file,$offset=False,$append='',$app=False) + function select($table,$cols,$where,$line,$file,$offset=False,$append='',$app=False,$num_rows=0) { if ($this->Debug) echo "

db::select('$table',".print_r($cols,True).",".print_r($where,True).",$line,$file,$offset,'$app')

\n"; @@ -1294,6 +1305,6 @@ if ($this->Debug) echo "

sql='$sql'

"; - return $this->query($sql,$line,$file,$offset,$offset===False ? -1 : 0); + return $this->query($sql,$line,$file,$offset,$offset===False ? -1 : (int)$num_rows); } }