diff options
Diffstat (limited to 'Bugzilla/DB.pm')
-rw-r--r-- | Bugzilla/DB.pm | 1208 |
1 files changed, 874 insertions, 334 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm index 71669b714..9378054b3 100644 --- a/Bugzilla/DB.pm +++ b/Bugzilla/DB.pm @@ -1089,82 +1089,141 @@ should not be called from anywhere else. =head2 Functions -=over 4 +=over =item C<connect_main> - Description: Function to connect to the main database, returning a new - database handle. - Params: $no_db_name (optional) - If true, Connect to the database - server, but don't connect to a specific database. This - is only used when creating a database. After you create - the database, you should re-create a new Bugzilla::DB object - without using this parameter. - Returns: new instance of the DB class +=over + +=item B<Description> + +Function to connect to the main database, returning a new database handle. + +=item B<Params> + +=over + +=item C<$no_db_name> (optional) - If true, connect to the database +server, but don't connect to a specific database. This is only used +when creating a database. After you create the database, you should +re-create a new Bugzilla::DB object without using this parameter. + +=back + +=item B<Returns> + +New instance of the DB class + +=back =item C<connect_shadow> - Description: Function to connect to the shadow database, returning a new - database handle. - This routine C<die>s if no shadow database is configured. - Params: none - Returns: new instance of the DB class +=over + +=item B<Description> + +Function to connect to the shadow database, returning a new database handle. +This routine C<die>s if no shadow database is configured. + +=item B<Params> (none) + +=item B<Returns> + +A new instance of the DB class + +=back + +=item C<bz_check_requirements> + +=over + +=item B<Description> + +Checks to make sure that you have the correct DBD and database version +installed for the database that Bugzilla will be using. Prints a message +and exits if you don't pass the requirements. + +If C<$db_check> is false (from F<localconfig>), we won't check the +database version. + +=item B<Params> + +=over + +=item C<$output> - C<true> if the function should display informational +output about what it's doing, such as versions found. -=item C<bz_check_requirements($output)> +=back + +=item B<Returns> (nothing) + +=back -Description: Checks to make sure that you have the correct - DBD and database version installed for the - database that Bugzilla will be using. - Prints a message and exits if you don't - pass the requirements. - If C<$db_check> is true (from F<localconfig>), we won't - check the database version. -Params: C<$output> - C<true> if the function should display - informational output about what it's doing, such - as versions found. +=item C<bz_create_database> -Returns: nothing +=over -=item C<bz_create_database()> +=item B<Description> -Description: Creates an empty database with the name - C<$db_name>, if that database doesn't - already exist. Prints an error message and - exits if we can't create the database. +Creates an empty database with the name C<$db_name>, if that database +doesn't already exist. Prints an error message and exits if we can't +create the database. -Params: none +=item B<Params> (none) -Returns: nothing +=item B<Returns> (nothing) + +=back =item C<_connect> - Description: Internal function, creates and returns a new, connected - instance of the correct DB class. - This routine C<die>s if no driver is specified. - Params: $driver = name of the database driver to use - $host = host running the database we are connecting to - $dbname = name of the database to connect to - $port = port the database is listening on - $sock = socket the database is listening on - $user = username used to log in to the database - $pass = password used to log in to the database - Returns: new instance of the DB class +=over + +=item B<Description> + +Internal function, creates and returns a new, connected instance of the +correct DB class. This routine C<die>s if no driver is specified. + +=item B<Params> + +=over + +=item C<$driver> - name of the database driver to use + +=item C<$host> - host running the database we are connecting to + +=item C<$dbname> - name of the database to connect to + +=item C<$port> - port the database is listening on + +=item C<$sock> - socket the database is listening on + +=item C<$user> - username used to log in to the database + +=item C<$pass> - password used to log in to the database + +=back + +=item B<Returns> + +A new instance of the DB class + +=back =item C<_handle_error> - Description: Function passed to the DBI::connect call for error handling. - It shortens the error for printing. +Function passed to the DBI::connect call for error handling. It shortens the +error for printing. =item C<import> - Description: Overrides the standard import method to check that derived class - implements all required abstract methods. Also calls original - implementation in its super class. +Overrides the standard import method to check that derived class +implements all required abstract methods. Also calls original implementation +in its super class. =back - =head1 ABSTRACT METHODS Note: Methods which can be implemented generically for all DBs are implemented in @@ -1174,185 +1233,478 @@ be implemented for all supported databases separately. To avoid confusion with standard DBI methods, all methods returning string with formatted SQL command have prefix C<sql_>. All other methods have prefix C<bz_>. -=over 4 +=head2 Constructor + +=over =item C<new> - Description: Constructor - Abstract method, should be overridden by database specific code. - Params: $user = username used to log in to the database - $pass = password used to log in to the database - $host = host running the database we are connecting to - $dbname = name of the database to connect to - $port = port the database is listening on - $sock = socket the database is listening on - Returns: new instance of the DB class - Note: The constructor should create a DSN from the parameters provided and - then call C<db_new()> method of its super class to create a new - class instance. See C<db_new> description in this module. As per - DBI documentation, all class variables must be prefixed with - "private_". See L<DBI>. +=over + +=item B<Description> + +Constructor. Abstract method, should be overridden by database specific +code. + +=item B<Params> + +=over + +=item C<$user> - username used to log in to the database + +=item C<$pass> - password used to log in to the database + +=item C<$host> - host running the database we are connecting to + +=item C<$dbname> - name of the database to connect to + +=item C<$port> - port the database is listening on + +=item C<$sock> - socket the database is listening on + +=back + +=item B<Returns> + +A new instance of the DB class + +=item B<Note> + +The constructor should create a DSN from the parameters provided and +then call C<db_new()> method of its super class to create a new +class instance. See L<db_new> description in this module. As per +DBI documentation, all class variables must be prefixed with +"private_". See L<DBI>. + +=back + +=back + +=head2 SQL Generation + +=over =item C<sql_regexp> - Description: Outputs SQL regular expression operator for POSIX regex - searches (case insensitive) in format suitable for a given - database. - Abstract method, should be overridden by database specific code. - Params: $expr = SQL expression for the text to be searched (scalar) - $pattern = the regular expression to search for (scalar) - Returns: formatted SQL for regular expression search (e.g. REGEXP) - (scalar) +=over + +=item B<Description> + +Outputs SQL regular expression operator for POSIX regex +searches (case insensitive) in format suitable for a given +database. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<$expr> - SQL expression for the text to be searched (scalar) + +=item C<$pattern> - the regular expression to search for (scalar) + +=back + +=item B<Returns> + +Formatted SQL for regular expression search (e.g. REGEXP) (scalar) + +=back =item C<sql_not_regexp> - Description: Outputs SQL regular expression operator for negative POSIX - regex searches (case insensitive) in format suitable for a given - database. - Abstract method, should be overridden by database specific code. - Params: $expr = SQL expression for the text to be searched (scalar) - $pattern = the regular expression to search for (scalar) - Returns: formatted SQL for negative regular expression search - (e.g. NOT REGEXP) (scalar) +=over + +=item B<Description> + +Outputs SQL regular expression operator for negative POSIX +regex searches (case insensitive) in format suitable for a given +database. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<$expr> - SQL expression for the text to be searched (scalar) + +=item C<$pattern> - the regular expression to search for (scalar) + +=back + +=item B<Returns> + +Formatted SQL for negative regular expression search (e.g. NOT REGEXP) +(scalar) + +=back =item C<sql_limit> - Description: Returns SQL syntax for limiting results to some number of rows - with optional offset if not starting from the begining. - Abstract method, should be overridden by database specific code. - Params: $limit = number of rows to return from query (scalar) - $offset = number of rows to skip prior counting (scalar) - Returns: formatted SQL for limiting number of rows returned from query - with optional offset (e.g. LIMIT 1, 1) (scalar) +=over + +=item B<Description> + +Returns SQL syntax for limiting results to some number of rows +with optional offset if not starting from the begining. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<$limit> - number of rows to return from query (scalar) + +=item C<$offset> - number of rows to skip prior counting (scalar) + +=back + +=item B<Returns> + +Formatted SQL for limiting number of rows returned from query +with optional offset (e.g. LIMIT 1, 1) (scalar) + +=back =item C<sql_from_days> - Description: Outputs SQL syntax for converting Julian days to date. - Abstract method, should be overridden by database specific code. - Params: $days = days to convert to date - Returns: formatted SQL for returning Julian days in dates. (scalar) +=over + +=item B<Description> + +Outputs SQL syntax for converting Julian days to date. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<$days> - days to convert to date + +=back + +=item B<Returns> + +Formatted SQL for returning Julian days in dates. (scalar) + +=back =item C<sql_to_days> - Description: Outputs SQL syntax for converting date to Julian days. - Abstract method, should be overridden by database specific code. - Params: $date = date to convert to days - Returns: formatted SQL for returning date fields in Julian days. (scalar) +=over + +=item B<Description> + +Outputs SQL syntax for converting date to Julian days. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<$date> - date to convert to days + +=back + +=item B<Returns> + +Formatted SQL for returning date fields in Julian days. (scalar) + +=back =item C<sql_date_format> - Description: Outputs SQL syntax for formatting dates. - Abstract method, should be overridden by database specific code. - Params: $date = date or name of date type column (scalar) - $format = format string for date output (scalar) - (%Y = year, four digits, %y = year, two digits, %m = month, - %d = day, %a = weekday name, 3 letters, %H = hour 00-23, - %i = minute, %s = second) - Returns: formatted SQL for date formatting (scalar) +=over + +=item B<Description> + +Outputs SQL syntax for formatting dates. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<$date> - date or name of date type column (scalar) + +=item C<$format> - format string for date output (scalar) +(C<%Y> = year, four digits, C<%y> = year, two digits, C<%m> = month, +C<%d> = day, C<%a> = weekday name, 3 letters, C<%H> = hour 00-23, +C<%i> = minute, C<%s> = second) + +=back + +=item B<Returns> + +Formatted SQL for date formatting (scalar) + +=back =item C<sql_interval> - Description: Outputs proper SQL syntax for a time interval function. - Abstract method, should be overridden by database specific code. - Params: $interval - the time interval requested (e.g. '30') (integer) - $units - the units the interval is in (e.g. 'MINUTE') (string) - Returns: formatted SQL for interval function (scalar) +=over + +=item B<Description> + +Outputs proper SQL syntax for a time interval function. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<$interval> - the time interval requested (e.g. '30') (integer) + +=item C<$units> - the units the interval is in (e.g. 'MINUTE') (string) + +=back + +=item B<Returns> + +Formatted SQL for interval function (scalar) + +=back =item C<sql_position> - Description: Outputs proper SQL syntax determinig position of a substring - (fragment) withing a string (text). Note: if the substring or - text are string constants, they must be properly quoted - (e.g. "'pattern'"). - Params: $fragment = the string fragment we are searching for (scalar) - $text = the text to search (scalar) - Returns: formatted SQL for substring search (scalar) +=over + +=item B<Description> + +Outputs proper SQL syntax determinig position of a substring +(fragment) withing a string (text). Note: if the substring or +text are string constants, they must be properly quoted (e.g. "'pattern'"). + +=item B<Params> + +=over + +=item C<$fragment> - the string fragment we are searching for (scalar) + +=item C<$text> - the text to search (scalar) + +=back + +=item B<Returns> + +Formatted SQL for substring search (scalar) + +=back =item C<sql_group_by> - Description: Outputs proper SQL syntax for grouping the result of a query. - For ANSI SQL databases, we need to group by all columns we are - querying for (except for columns used in aggregate functions). - Some databases require (or even allow) to specify only one - or few columns if the result is uniquely defined. For those - databases, the default implementation needs to be overloaded. - Params: $needed_columns = string with comma separated list of columns - we need to group by to get expected result (scalar) - $optional_columns = string with comma separated list of all - other columns we are querying for, but which are not in the - required list. - Returns: formatted SQL for row grouping (scalar) +=over + +=item B<Description> + +Outputs proper SQL syntax for grouping the result of a query. + +For ANSI SQL databases, we need to group by all columns we are +querying for (except for columns used in aggregate functions). +Some databases require (or even allow) to specify only one +or few columns if the result is uniquely defined. For those +databases, the default implementation needs to be overloaded. + +=item B<Params> + +=over + +=item C<$needed_columns> - string with comma separated list of columns +we need to group by to get expected result (scalar) + +=item C<$optional_columns> - string with comma separated list of all +other columns we are querying for, but which are not in the required list. + +=back + +=item B<Returns> + +Formatted SQL for row grouping (scalar) + +=back =item C<sql_string_concat> - Description: Returns SQL syntax for concatenating multiple strings (constants - or values from table columns) together. - Params: @params = array of column names or strings to concatenate - Returns: formatted SQL for concatenating specified strings +=over + +=item B<Description> + +Returns SQL syntax for concatenating multiple strings (constants +or values from table columns) together. + +=item B<Params> + +=over + +=item C<@params> - array of column names or strings to concatenate + +=back + +=item B<Returns> + +Formatted SQL for concatenating specified strings + +=back =item C<sql_fulltext_search> - Description: Returns SQL syntax for performing a full text search for - specified text on a given column. - There is a ANSI SQL version of this method implemented using - LIKE operator, but it's not a real full text search. DB specific - modules should override this, as this generic implementation will - be always much slower. This generic implementation returns - 'relevance' as 0 for no match, or 1 for a match. - Params: $column = name of column to search (scalar) - $text = text to search for (scalar) - Returns: formatted SQL for full text search +=over + +=item B<Description> + +Returns SQL syntax for performing a full text search for specified text +on a given column. + +There is a ANSI SQL version of this method implemented using LIKE operator, +but it's not a real full text search. DB specific modules should override +this, as this generic implementation will be always much slower. This +generic implementation returns 'relevance' as 0 for no match, or 1 for a +match. + +=item B<Params> + +=over + +=item C<$column> - name of column to search (scalar) + +=item C<$text> - text to search for (scalar) + +=back + +=item B<Returns> + +Formatted SQL for full text search + +=back =item C<sql_istrcmp> - Description: Returns SQL for a case-insensitive string comparison. - Params: $left - What should be on the left-hand-side of the - operation. - $right - What should be on the right-hand-side of the - operation. - $op (optional) - What the operation is. Should be a - valid ANSI SQL comparison operator, like "=", "<", - "LIKE", etc. Defaults to "=" if not specified. - Returns: A SQL statement that will run the comparison in - a case-insensitive fashion. - Note: Uses sql_istring, so it has the same performance concerns. - Try to avoid using this function unless absolutely necessary. - Subclass Implementors: Override sql_istring instead of this - function, most of the time (this function uses sql_istring). +=over + +=item B<Description> + +Returns SQL for a case-insensitive string comparison. + +=item B<Params> + +=over + +=item C<$left> - What should be on the left-hand-side of the operation. + +=item C<$right> - What should be on the right-hand-side of the operation. + +=item C<$op> (optional) - What the operation is. Should be a valid ANSI +SQL comparison operator, such as C<=>, C<E<lt>>, C<LIKE>, etc. Defaults +to C<=> if not specified. + +=back + +=item B<Returns> + +A SQL statement that will run the comparison in a case-insensitive fashion. + +=item B<Note> + +Uses L</sql_istring>, so it has the same performance concerns. +Try to avoid using this function unless absolutely necessary. + +Subclass Implementors: Override sql_istring instead of this +function, most of the time (this function uses sql_istring). + +=back =item C<sql_istring> - Description: Returns SQL syntax "preparing" a string or text column for - case-insensitive comparison. - Params: $string - string to convert (scalar) - Returns: formatted SQL making the string case insensitive - Note: The default implementation simply calls LOWER on the parameter. - If this is used to search on a text column with index, the index - will not be usually used unless it was created as LOWER(column). +=over + +=item B<Description> + +Returns SQL syntax "preparing" a string or text column for case-insensitive +comparison. + +=item B<Params> + +=over + +=item C<$string> - string to convert (scalar) + +=back + +=item B<Returns> + +Formatted SQL making the string case insensitive. + +=item B<Note> + +The default implementation simply calls LOWER on the parameter. +If this is used to search on a text column with index, the index +will not be usually used unless it was created as LOWER(column). + +=back =item C<bz_lock_tables> - Description: Performs a table lock operation on specified tables. - If the underlying database supports transactions, it should also - implicitly start a new transaction. - Abstract method, should be overridden by database specific code. - Params: @tables = list of names of tables to lock in MySQL - notation (ex. 'bugs AS bugs2 READ', 'logincookies WRITE') - Returns: none +=over + +=item B<Description> + +Performs a table lock operation on specified tables. If the underlying +database supports transactions, it should also implicitly start a new +transaction. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<@tables> - list of names of tables to lock in MySQL +notation (ex. 'bugs AS bugs2 READ', 'logincookies WRITE') + +=back + +=item B<Returns> (nothing) + +=back =item C<bz_unlock_tables> - Description: Performs a table unlock operation - If the underlying database supports transactions, it should also - implicitly commit or rollback the transaction. - Also, this function should allow to be called with the abort flag - set even without locking tables first without raising an error - to simplify error handling. - Abstract method, should be overridden by database specific code. - Params: $abort = UNLOCK_ABORT (true, 1) if the operation on locked tables - failed (if transactions are supported, the action will be rolled - back). False (0) or no param if the operation succeeded. - Returns: none +=over + +=item B<Description> + +Performs a table unlock operation. + +If the underlying database supports transactions, it should also implicitly +commit or rollback the transaction. + +Also, this function should allow to be called with the abort flag +set even without locking tables first without raising an error +to simplify error handling. + +Abstract method, should be overridden by database specific code. + +=item B<Params> + +=over + +=item C<$abort> - C<UNLOCK_ABORT> if the operation on locked tables +failed (if transactions are supported, the action will be rolled +back). No param if the operation succeeded. This is only used by +L<Bugzilla::Error/throw_error>. + +=back + +=item B<Returns> (none) + +=back =back @@ -1367,41 +1719,80 @@ database-compatibility reasons. These methods return information about data in the database. -=over 4 +=over =item C<bz_last_key> - Description: Returns the last serial number, usually from a previous INSERT. - Must be executed directly following the relevant INSERT. - This base implementation uses DBI->last_insert_id. If the - DBD supports it, it is the preffered way to obtain the last - serial index. If it is not supported, the DB specific code - needs to override it with DB specific code. - Params: $table = name of table containing serial column (scalar) - $column = name of column containing serial data type (scalar) - Returns: Last inserted ID (scalar) +=over + +=item B<Description> + +Returns the last serial number, usually from a previous INSERT. + +Must be executed directly following the relevant INSERT. +This base implementation uses L<DBI/last_insert_id>. If the +DBD supports it, it is the preffered way to obtain the last +serial index. If it is not supported, the DB-specific code +needs to override this function. + +=item B<Params> + +=over + +=item C<$table> - name of table containing serial column (scalar) + +=item C<$column> - name of column containing serial data type (scalar) + +=back + +=item B<Returns> + +Last inserted ID (scalar) + +=back + +=item C<bz_get_field_defs> + +=over + +=item B<Description> + +Returns a list of all the "bug" fields in Bugzilla. The list +contains hashes, with a C<name> key and a C<description> key. + +=item B<Params> (none) + +=item B<Returns> + +List of all the "bug" fields =back +=back =head2 Database Setup Methods These methods are used by the Bugzilla installation programs to set up the database. -=over 4 +=over + +=item C<bz_populate_enum_tables> + +=over + +=item B<Description> -=item C<bz_populate_enum_tables()> +For an upgrade or an initial installation, populates the tables that hold +the legal values for the old "enum" fields: C<bug_severity>, +C<resolution>, etc. Prints out information if it inserts anything into the +DB. -Description: For an upgrade or an initial installation, populates - the tables that hold the legal values for the old - "enum" fields: C<bug_severity>, C<resolution>, etc. - Prints out information if it inserts anything into the - DB. +=item B<Params> (none) -Params: none +=item B<Returns> (nothing) -Returns: nothing +=back =back @@ -1414,103 +1805,220 @@ Where a parameter says "Abstract index/column definition", it returns/takes information in the formats defined for indexes and columns in C<Bugzilla::DB::Schema::ABSTRACT_SCHEMA>. -=over 4 +=over -=item C<bz_add_column($table, $name, \%definition, $init_value)> - - Description: Adds a new column to a table in the database. Prints out - a brief statement that it did so, to stdout. - Note that you cannot add a NOT NULL column that has no - default -- the database won't know what to set all - the NOT NULL values to. - Params: $table = the table where the column is being added - $name = the name of the new column - \%definition = Abstract column definition for the new column - $init_value = (optional) An initial value to set the column - to. Required if your column is NOT NULL and has - no DEFAULT set. - Returns: nothing +=item C<bz_add_column> -=item C<bz_add_index($table, $name, $definition)> +=over - Description: Adds a new index to a table in the database. Prints - out a brief statement that it did so, to stdout. - If the index already exists, we will do nothing. - Params: $table - The table the new index is on. - $name - A name for the new index. - $definition - An abstract index definition. - Either a hashref or an arrayref. - Returns: nothing +=item B<Description> -=item C<bz_add_table($name)> +Adds a new column to a table in the database. Prints out a brief statement +that it did so, to stdout. Note that you cannot add a NOT NULL column that +has no default -- the database won't know what to set all the NULL +values to. - Description: Creates a new table in the database, based on the - definition for that table in the abstract schema. - Note that unlike the other 'add' functions, this does - not take a definition, but always creates the table - as it exists in the ABSTRACT_SCHEMA. - If a table with that name already exists, then this - function returns silently. - Params: $name - The name of the table you want to create. - Returns: nothing +=item B<Params> -=item C<bz_drop_index($table, $name)> +=over - Description: Removes an index from the database. Prints out a brief - statement that it did so, to stdout. If the index - doesn't exist, we do nothing. - Params: $table - The table that the index is on. - $name - The name of the index that you want to drop. - Returns: nothing +=item C<$table> - the table where the column is being added -=item C<bz_drop_table($name)> +=item C<$name> - the name of the new column - Description: Drops a table from the database. If the table - doesn't exist, we just return silently. - Params: $name - The name of the table to drop. - Returns: nothing +=item C<\%definition> - Abstract column definition for the new column -=item C<bz_alter_column($table, $name, \%new_def, $set_nulls_to)> - - Description: Changes the data type of a column in a table. Prints out - the changes being made to stdout. If the new type is the - same as the old type, the function returns without changing - anything. - Params: $table = the table where the column is - $name = the name of the column you want to change - $new_def = An abstract column definition for the new - data type of the columm - $set_nulls_to = (Optional) If you are changing the column - to be NOT NULL, you probably also want to - set any existing NULL columns to a particular - value. Specify that value here. - NOTE: The value should not already be SQL-quoted. - Returns: nothing +=item C<$init_value> (optional) - An initial value to set the column +to. Required if your column is NOT NULL and has no DEFAULT set. -=item C<bz_drop_column($table, $column)> - - Description: Removes a column from a database table. If the column - doesn't exist, we return without doing anything. If we do - anything, we print a short message to stdout about the change. - Params: $table = The table where the column is - $column = The name of the column you want to drop - Returns: none - -=item C<bz_rename_column($table, $old_name, $new_name)> - - Description: Renames a column in a database table. If the C<$old_name> - column doesn't exist, we return without doing anything. - If C<$old_name> and C<$new_name> both already exist in the - table specified, we fail. - Params: $table = The table containing the column - that you want to rename - $old_name = The current name of the column that - you want to rename - $new_name = The new name of the column - Returns: nothing +=back + +=item B<Returns> (nothing) + +=back + +=item C<bz_add_index> + +=over + +=item B<Description> + +Adds a new index to a table in the database. Prints out a brief statement +that it did so, to stdout. If the index already exists, we will do nothing. + +=item B<Params> + +=over + +=item C<$table> - The table the new index is on. + +=item C<$name> - A name for the new index. + +=item C<$definition> - An abstract index definition. Either a hashref +or an arrayref. + +=back + +=item B<Returns> (nothing) + +=back + +=item C<bz_add_table> + +=over + +=item B<Description> + +Creates a new table in the database, based on the definition for that +table in the abstract schema. + +Note that unlike the other 'add' functions, this does not take a +definition, but always creates the table as it exists in +L<Bugzilla::DB::Schema/ABSTRACT_SCHEMA>. + +If a table with that name already exists, then this function returns +silently. + +=item B<Params> + +=over + +=item C<$name> - The name of the table you want to create. + +=back + +=item B<Returns> (nothing) =back +=item C<bz_drop_index> + +=over + +=item B<Description> + +Removes an index from the database. Prints out a brief statement that it +did so, to stdout. If the index doesn't exist, we do nothing. + +=item B<Params> + +=over + +=item C<$table> - The table that the index is on. + +=item C<$name> - The name of the index that you want to drop. + +=back + +=item B<Returns> (nothing) + +=back + +=item C<bz_drop_table> + +=over + +=item B<Description> + +Drops a table from the database. If the table doesn't exist, we just +return silently. + +=item B<Params> + +=over + +=item C<$name> - The name of the table to drop. + +=back + +=item B<Returns> (nothing) + +=back + +=item C<bz_alter_column> + +=over + +=item B<Description> + +Changes the data type of a column in a table. Prints out the changes +being made to stdout. If the new type is the same as the old type, +the function returns without changing anything. + +=item B<Params> + +=over + +=item C<$table> - the table where the column is + +=item C<$name> - the name of the column you want to change + +=item C<\%new_def> - An abstract column definition for the new +data type of the columm + +=item C<$set_nulls_to> (Optional) - If you are changing the column +to be NOT NULL, you probably also want to set any existing NULL columns +to a particular value. Specify that value here. B<NOTE>: The value should +not already be SQL-quoted. + +=back + +=item B<Returns> (nothing) + +=back + +=item C<bz_drop_column> + +=over + +=item B<Description> + +Removes a column from a database table. If the column doesn't exist, we +return without doing anything. If we do anything, we print a short +message to C<stdout> about the change. + +=item B<Params> + +=over + +=item C<$table> - The table where the column is + +=item C<$column> - The name of the column you want to drop + +=back + +=item B<Returns> (nothing) + +=back + +=item C<bz_rename_column> + +=over + +=item B<Description> + +Renames a column in a database table. If the C<$old_name> column +doesn't exist, we return without doing anything. If C<$old_name> +and C<$new_name> both already exist in the table specified, we fail. + +=item B<Params> + +=over + +=item C<$table> - The name of the table containing the column +that you want to rename + +=item C<$old_name> - The current name of the column that you want to rename + +=item C<$new_name> - The new name of the column + +=back + +=item B<Returns> (nothing) + +=back + +=back =head2 Schema Information Methods @@ -1518,46 +2026,63 @@ These methods return information about the current Bugzilla database schema, as it currently exists on the disk. Where a parameter says "Abstract index/column definition", it returns/takes -information in the formats defined for indexes and columns in -C<Bugzilla::DB::Schema::ABSTRACT_SCHEMA>. +information in the formats defined for indexes and columns for +L<Bugzilla::DB::Schema/ABSTRACT_SCHEMA>. -=over 4 +=over + +=item C<bz_column_info> + +=over -=item C<bz_column_info($table, $column)> +=item B<Description> - Description: Get abstract column definition. - Params: $table - The name of the table the column is in. - $column - The name of the column. - Returns: An abstract column definition for that column. - If the table or column does not exist, we return undef. +Get abstract column definition. -=item C<bz_index_info($table, $index)> +=item B<Params> - Description: Get abstract index definition. - Params: $table - The table the index is on. - $index - The name of the index. - Returns: An abstract index definition for that index, - always in hashref format. The hashref will - always contain the TYPE element, but it will - be an empty string if it's just a normal index. - If the index does not exist, we return undef. +=over + +=item C<$table> - The name of the table the column is in. + +=item C<$column> - The name of the column. =back +=item B<Returns> -=head2 Deprecated Schema Information Methods +An abstract column definition for that column. If the table or column +does not exist, we return C<undef>. -These methods return info about the current Bugzilla database, for -MySQL only. +=back -=over 4 +=item C<bz_index_info> -=item C<bz_get_field_defs> +=over - Description: Returns a list of all the "bug" fields in Bugzilla. The list - contains hashes, with a 'name' key and a 'description' key. - Params: none - Returns: List of all the "bug" fields +=item B<Description> + +Get abstract index definition. + +=item B<Params> + +=over + +=item C<$table> - The table the index is on. + +=item C<$index> - The name of the index. + +=back + +=item B<Returns> + +An abstract index definition for that index, always in hashref format. +The hashref will always contain the C<TYPE> element, but it will +be an empty string if it's just a normal index. + +If the index does not exist, we return C<undef>. + +=back =back @@ -1567,27 +2092,22 @@ MySQL only. These methods deal with the starting and stopping of transactions in the database. -=over 4 +=over =item C<bz_start_transaction> - Description: Starts a transaction if supported by the database being used - Params: none - Returns: none +Starts a transaction if supported by the database being used. Returns nothing +and takes no parameters. =item C<bz_commit_transaction> - Description: Ends a transaction, commiting all changes, if supported by - the database being used - Params: none - Returns: none +Ends a transaction, commiting all changes, if supported by the database +being used. Returns nothing and takes no parameters. =item C<bz_rollback_transaction> - Description: Ends a transaction, rolling back all changes, if supported by - the database being used - Params: none - Returns: none +Ends a transaction, rolling back all changes, if supported by the database +being used. Returns nothing and takes no parameters. =back @@ -1597,18 +2117,40 @@ in the database. Methods in this class are intended to be used by subclasses to help them with their functions. -=over 4 +=over =item C<db_new> - Description: Constructor - Params: $dsn = database connection string - $user = username used to log in to the database - $pass = password used to log in to the database - $attributes = set of attributes for DB connection (optional) - Returns: new instance of the DB class - Note: the name of this constructor is not new, as that would make - our check for implementation of new() by derived class useles. +=over + +=item B<Description> + +Constructor + +=item B<Params> + +=over + +=item C<$dsn> - database connection string + +=item C<$user> - username used to log in to the database + +=item C<$pass> - password used to log in to the database + +=item C<\%attributes> - set of attributes for DB connection (optional) + +=back + +=item B<Returns> + +A new instance of the DB class + +=item B<Note> + +The name of this constructor is not C<new>, as that would make +our check for implementation of C<new> by derived class useless. + +=back =back @@ -1617,6 +2159,4 @@ with their functions. L<DBI> -L<Bugzilla::Constants> - The C<DB_MODULE> constant. - -=cut +L<Bugzilla::Constants/DB_MODULE> |