Difference between revisions of "API:EPrints/Database"
(11 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<!-- Pod2Wiki=_preamble_ | <!-- Pod2Wiki=_preamble_ | ||
− | This page has been automatically generated from the EPrints 3. | + | This page has been automatically generated from the EPrints 3.4 source. Any wiki changes made between the 'Pod2Wiki=*' and 'Edit below this comment' comments will be lost. |
− | -->{{API}}{{Pod2Wiki}}{{API:Source|file= | + | -->{{API}}{{Pod2Wiki}}{{API:Source|file=EPrints/Database.pm|package_name=EPrints::Database}}[[Category:API|DATABASE]]<div><!-- Edit below this comment --> |
<!-- Pod2Wiki=_private_ --><!-- Pod2Wiki=head_name --> | <!-- Pod2Wiki=_private_ --><!-- Pod2Wiki=head_name --> | ||
==NAME== | ==NAME== | ||
− | '''EPrints::Database''' - a connection to the SQL database for an eprints session | + | '''EPrints::Database''' - a connection to the SQL database for an eprints session. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | < | + | </div> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<!-- Pod2Wiki=head_description --> | <!-- Pod2Wiki=head_description --> | ||
==DESCRIPTION== | ==DESCRIPTION== | ||
EPrints Database Access Module | EPrints Database Access Module | ||
− | Provides access to the backend database. All database access | + | Provides access to the backend database. All database access done via this module, in the hope that the backend can be replaced as easily as possible. |
− | In most use-cases it should not be necessary to use the database module directly. Instead you should use [[API:EPrints/DataSet|EPrints::DataSet]] or [[API:EPrints/MetaField|EPrints::MetaField]] accessor methods to access objects and field values respectively. | + | In most use-cases it should not be necessary to use the database module directly. Instead you should use [[API:EPrints/DataSet|EPrints::DataSet]] or [[API:EPrints/MetaField|EPrints::MetaField]] accessor methods to access objects and field values respectively. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_cross_database_support --> | <!-- Pod2Wiki=head_cross_database_support --> | ||
===Cross-database Support=== | ===Cross-database Support=== | ||
− | Any use of SQL statements must use [[API:EPrints/Database#quote_identifier|quote_identifier]] to quote database tables and columns and | + | Any use of SQL statements must use [[API:EPrints/Database#quote_identifier|quote_identifier]] to quote database tables and columns and quote_value to quote values. The only exception to this are the EPrints::Database::* modules which provide database-driver specific extensions. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_quoting_sql_values --> | <!-- Pod2Wiki=head_quoting_sql_values --> | ||
===Quoting SQL Values=== | ===Quoting SQL Values=== | ||
− | By convention variables that contain already quoted values are prefixed with | + | By convention variables that contain already quoted values are prefixed with <tt>Q_</tt> so they can be easily recognised when used in string interpolation: |
+ | |||
+ | my $Q_value = $db->quote_value( "Hello, World!" ); | ||
+ | $db->do("SELECT $Q_value"); | ||
+ | |||
+ | Where possible you should avoid quoting values yourself, instead use a method that accepts unquoted values which will (safely) do the work for you. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=head_constants --> | ||
+ | ==CONSTANTS== | ||
+ | All the <tt>SQL_</tt> column types defined by Perl module {{API:PodLink|file=DBI|package_name=DBI|section=|text=DBI}} and the following: | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_sql_null --> | ||
+ | ===SQL_NULL=== | ||
+ | |||
+ | A column value is undefined. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_sql_not_null --> | ||
+ | ===SQL_NOT_NULL=== | ||
+ | |||
+ | A column value is defined. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=head_instance_variables --> | ||
+ | ==INSTANCE VARIABLES== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_$self->{session} --> | ||
+ | ===$self->{session}=== | ||
+ | |||
+ | The [[API:EPrints/Session|EPrints::Session]] which is associated with this database connection. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_$self->{debug} --> | ||
+ | ===$self->{debug}=== | ||
− | + | If <tt>true</tt> then SQL is logged. | |
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_$self->{dbh} --> | ||
+ | ===$self->{dbh}=== | ||
+ | |||
+ | The handle on the actual database connection. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_methods --> | <!-- Pod2Wiki=head_methods --> | ||
==METHODS== | ==METHODS== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_database --> | <!-- Pod2Wiki=head_database --> | ||
===Database=== | ===Database=== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_new --> | <!-- Pod2Wiki=item_new --> | ||
====new==== | ====new==== | ||
− | + | $db = EPrints::Database->new( $repo, [ %opts ] ) | |
+ | Create a connection to the database. | ||
− | + | Options: | |
− | + | db_connect - Boolean. Also connect to the database (default: true). | |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create --> | <!-- Pod2Wiki=item_create --> | ||
====create==== | ====create==== | ||
− | + | $db = $db->create( $username, $password ) | |
+ | Create and connect to a new database using user account <tt>$username</tt> and <tt>$password</tt>. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_build_connection_string --> | ||
+ | ====build_connection_string==== | ||
+ | |||
+ | $dbstr = EPrints::Database::build_connection_string( %params ) | ||
+ | Build the string to use to connect to the database via {{API:PodLink|file=DBI|package_name=DBI|section=|text=DBI}}. | ||
− | + | Parameters: | |
− | + | dbname - Database name (REQUIRED). | |
+ | dbdriver - Database driver (e.g. mysql, Oracle, pgsql, default: mysql). | ||
+ | dbhost - Database host. Assumes localhost if unset. | ||
+ | dbport - Port to connect to database host. Assumes default for driver if unset. | ||
+ | dbsock - Socket file to connect to database through. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_connect --> | <!-- Pod2Wiki=item_connect --> | ||
====connect==== | ====connect==== | ||
− | + | $db->connect() | |
− | |||
− | |||
Connects to the database. | Connects to the database. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_disconnect --> | <!-- Pod2Wiki=item_disconnect --> | ||
====disconnect==== | ====disconnect==== | ||
− | + | $db->disconnect() | |
− | + | Disconnects from the EPrints database. Should always be done before any script exits. | |
− | |||
− | Disconnects from the EPrints database. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_set_debug --> | <!-- Pod2Wiki=item_set_debug --> | ||
====set_debug==== | ====set_debug==== | ||
− | + | $db->set_debug( $boolean ) | |
− | + | Set the SQL debug mode to <tt>true</tt> or <tt>false</tt>. | |
− | |||
− | Set the SQL debug mode to true or false. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_set_version --> | <!-- Pod2Wiki=item_set_version --> | ||
====set_version==== | ====set_version==== | ||
− | + | $db->set_version( $versionid ); | |
− | + | Set the version id table in the SQL database to the given <tt>versionid</tt> (used by the upgrade script). | |
− | |||
− | Set the version id table in the SQL database to the given | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_version --> | <!-- Pod2Wiki=item_get_version --> | ||
====get_version==== | ====get_version==== | ||
− | + | $version = $db->get_version | |
− | + | Returns the current database schema version. | |
− | |||
− | Returns the current database schema version. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_is_latest_version --> | <!-- Pod2Wiki=item_is_latest_version --> | ||
====is_latest_version==== | ====is_latest_version==== | ||
− | + | $boolean = $db->is_latest_version | |
− | + | Return <tt>true</tt> if the SQL tables are in the correct configuration for this edition of eprints. Otherwise, <tt>false</tt>. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_server_version --> | <!-- Pod2Wiki=item_get_server_version --> | ||
====get_server_version==== | ====get_server_version==== | ||
− | + | $version = $db->get_server_version | |
− | |||
− | |||
Return the database server version. | Return the database server version. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_default_charset --> | <!-- Pod2Wiki=item_get_default_charset --> | ||
====get_default_charset==== | ====get_default_charset==== | ||
− | + | $charset = $db->get_default_charset | |
+ | Return the character set to use. | ||
− | </ | + | Returns <tt>undef</tt> if character sets are unsupported. |
− | |||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_default_collation --> | <!-- Pod2Wiki=item_get_default_collation --> | ||
====get_default_collation==== | ====get_default_collation==== | ||
− | + | $collation = $db->get_default_collation( $lang ) | |
+ | Return the collation to use for language <tt>$lang</tt>. | ||
− | </ | + | Returns <tt>undef</tt> if collation is unsupported. |
− | |||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_driver_name --> | <!-- Pod2Wiki=item_get_driver_name --> | ||
====get_driver_name==== | ====get_driver_name==== | ||
− | + | $driver = $db->get_driver_name | |
− | |||
− | |||
Return the database driver name. | Return the database driver name. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_error --> | <!-- Pod2Wiki=item_error --> | ||
====error==== | ====error==== | ||
− | + | $errstr = $db->error() | |
− | |||
− | |||
Return a string describing the last SQL error. | Return a string describing the last SQL error. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_retry_error --> | <!-- Pod2Wiki=item_retry_error --> | ||
====retry_error==== | ====retry_error==== | ||
− | + | $boolean = $db->retry_error() | |
− | + | Returns a boolean for whether the database error is a retry error. | |
− | |||
− | Returns | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_duplicate_error --> | <!-- Pod2Wiki=item_duplicate_error --> | ||
====duplicate_error==== | ====duplicate_error==== | ||
− | + | $boolean = $db->duplicate_error() | |
− | + | Returns a boolean for whether the database error is a duplicate error. | |
− | |||
− | Returns | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_begin --> | <!-- Pod2Wiki=item_begin --> | ||
====begin==== | ====begin==== | ||
− | + | $db->begin() | |
− | |||
− | |||
Begin a transaction. | Begin a transaction. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_commit --> | <!-- Pod2Wiki=item_commit --> | ||
====commit==== | ====commit==== | ||
− | + | $db->commit() | |
− | |||
− | |||
Commit the previously begun transaction. | Commit the previously begun transaction. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_rollback --> | <!-- Pod2Wiki=item_rollback --> | ||
====rollback==== | ====rollback==== | ||
− | + | $db->rollback() | |
− | + | Rollback the partially completed transaction. | |
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_type_info --> | <!-- Pod2Wiki=item_type_info --> | ||
====type_info==== | ====type_info==== | ||
− | + | $type_info = $db->type_info( $data_type ) | |
− | |||
− | |||
See {{API:PodLink|file=DBI|package_name=DBI|section=type_info|text=DBI/type_info}}. | See {{API:PodLink|file=DBI|package_name=DBI|section=type_info|text=DBI/type_info}}. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_column_type --> | <!-- Pod2Wiki=item_get_column_type --> | ||
====get_column_type==== | ====get_column_type==== | ||
− | + | $real_type = $db->get_column_type( $name, $data_type, $not_null, [ $length, $scale, %opts ] ) | |
− | + | Returns a SQL column definition for <tt>$name</tt> of type <tt>$type</tt>, usually something like: | |
− | |||
− | Returns a SQL column definition for | ||
$name $type($length,$scale) [ NOT NULL ] | $name $type($length,$scale) [ NOT NULL ] | ||
− | If | + | |
+ | If <tt>$not_null</tt> is <tt>true</tt> column will be set to <tt>NOT NULL</tt>. | ||
− | + | <tt>$length</tt> and <tt>$scale</tt> control the maximum lengths of character or decimal types (see below). | |
Other options available to refine the column definition: | Other options available to refine the column definition: | ||
Line 315: | Line 445: | ||
langid - character set/collation to use | langid - character set/collation to use | ||
sorted - whether this column will be used to order by | sorted - whether this column will be used to order by | ||
− | '''langid''' is mapped to real database values by the "dblanguages" configuration option. The database may not be able to order the request column type in which case, if | + | |
+ | '''langid''' is mapped to real database values by the "dblanguages" configuration option. The database may not be able to order the request column type in which case, if <tt>sorted</tt> is true, the database may use a substitute column type. | ||
− | + | <tt>$data_type</tt> is the SQL type. The types are constants defined by this module, to import them use: | |
use EPrints::Database qw( :sql_types ); | use EPrints::Database qw( :sql_types ); | ||
− | Supported types (n = requires | + | |
+ | Supported types (n = requires <tt>$length</tt> argument): | ||
− | Character data: SQL_VARCHAR(n), SQL_LONGVARCHAR, SQL_CLOB. | + | Character data: <tt>SQL_VARCHAR(n)</tt>, <tt>SQL_LONGVARCHAR</tt>, <tt>SQL_CLOB</tt>. |
− | Binary data: SQL_VARBINARY(n), SQL_LONGVARBINARY. | + | Binary data: <tt>SQL_VARBINARY(n)</tt>, <tt>SQL_LONGVARBINARY</tt>. |
− | Integer data: SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT. | + | Integer data: <tt>SQL_TINYINT</tt>, <tt>SQL_SMALLINT</tt>, <tt>SQL_INTEGER</tt>, <tt>SQL_BIGINT</tt>. |
− | Floating-point data: SQL_REAL, SQL_DOUBLE. | + | Floating-point data: <tt>SQL_REAL</tt>, <tt>SQL_DOUBLE</tt>. |
− | Time data: SQL_DATE, SQL_TIME. | + | Time data: <tt>SQL_DATE</tt>, <tt>SQL_TIME</tt>. |
The actual column types used will be database-specific. | The actual column types used will be database-specific. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_basic_sql_operations --> | <!-- Pod2Wiki=head_basic_sql_operations --> | ||
− | ===Basic SQL | + | ===Basic SQL Operations=== |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_do --> | <!-- Pod2Wiki=item_do --> | ||
====do==== | ====do==== | ||
− | + | $success = $db->do( $sql ) | |
− | + | Execute the given <tt>$sql</tt>. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_prepare --> | <!-- Pod2Wiki=item_prepare --> | ||
====prepare==== | ====prepare==== | ||
− | + | $sth = $db->prepare( $sql ) | |
− | + | Prepare the given <tt>$sql</tt> and return a handle on it. | |
− | < | ||
− | |||
Use the <tt>execute</tt> method on the returned {{API:PodLink|file=DBI|package_name=DBI|section=|text=DBI}} handle to execute the SQL: | Use the <tt>execute</tt> method on the returned {{API:PodLink|file=DBI|package_name=DBI|section=|text=DBI}} handle to execute the SQL: | ||
Line 368: | Line 505: | ||
my $sth = $db->prepare_select( "SELECT 'Hello, World'" ); | my $sth = $db->prepare_select( "SELECT 'Hello, World'" ); | ||
$sth->execute; | $sth->execute; | ||
− | <!-- Edit below this comment --> | + | |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_prepare_select --> | <!-- Pod2Wiki=item_prepare_select --> | ||
====prepare_select==== | ====prepare_select==== | ||
− | + | $sth = $db->prepare_select( $sql, [ %options ] ) | |
+ | Prepare a <tt>SELECT</tt> statement <tt>$sql</tt> and return a handle to it. After preparing a statement use <tt>execute()</tt> to execute it. | ||
− | + | Returns a {{API:PodLink|file=DBI|package_name=DBI|section=|text=DBI}} statement handle. | |
− | |||
− | + | The <tt>LIMIT</tt> SQL keyword is not universally supported, to specify this use the <tt>limit</tt> option. | |
Options: | Options: | ||
limit - limit the number of rows returned | limit - limit the number of rows returned | ||
− | offset - return limit number of rows after offset | + | offset - return '''limit''' number of rows after offset |
− | <!-- Edit below this comment --> | + | |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_execute --> | ||
+ | ====execute==== | ||
+ | |||
+ | $success = $db->execute( $sth, $sql ) | ||
+ | Execute the SQL prepared earlier in the <tt>$sth</tt>. <tt>$sql</tt> is only required for debugging purposes. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_update --> | <!-- Pod2Wiki=item_update --> | ||
====update==== | ====update==== | ||
− | + | $success = $db->update( $dataset, $data, $changed ) | |
+ | Updates a <tt>EPrints::DataObj</tt> from <tt>$dataset</tt> with the given <tt>$data</tt>. The primary key field (e.g. <tt>eprintid</tt>) value must be included. | ||
− | </ | + | Updates the <tt>ordervalues</tt> if the <tt>$dataset</tt> is {{API:PodLink|file=EPrints/DataSet#ordered|package_name=EPrints::DataSet#ordered|section=|text=ordered}}. |
− | |||
− | + | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | |
− | + | <span style='display:none'>User Comments</span> | |
− | + | <!-- Edit below this comment --> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
− | ==== | + | <!-- Pod2Wiki=item__update --> |
+ | ====_update==== | ||
− | + | $rows = $db->_update( $tablename, $keycols, $keyvals, $columns, @values ) | |
+ | Updates <tt>$columns</tt> in <tt>$tablename</tt> with <tt>@values</tt> where <tt>$keycols</tt> equals <tt>$keyvals</tt> and returns the number of rows affected. | ||
− | </ | + | N.B. If no rows are affected, the result is still <tt>true</tt>, see {{API:PodLink|file=DBI|package_name=DBI|section=|text=DBI}}'s <tt>execute()</tt> method. |
− | |||
− | + | This is an internal method. | |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_insert --> | <!-- Pod2Wiki=item_insert --> | ||
====insert==== | ====insert==== | ||
− | + | $success = $db->insert( $table, $columns, @values ) | |
− | + | Inserts <tt>@values</tt> into the table <tt>$table</tt>. If <tt>$columns</tt> is defined it will be used as a list of columns to insert into. <tt>@values</tt> is a list of arrays containing values to insert. These will be quoted before insertion. | |
− | </ | ||
− | |||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_insert_quoted --> | <!-- Pod2Wiki=item_insert_quoted --> | ||
====insert_quoted==== | ====insert_quoted==== | ||
− | + | $success = $db->insert_quoted( $table, $columns, @qvalues ) | |
− | + | Inserts values into the table <tt>$table</tt>. If <tt>$columns</tt> is defined it will be used as a list of columns to insert into. <tt>@qvalues</tt> is a list of arrays containing values to insert. These will NOT be quoted before insertion - care must be exercised! | |
− | |||
− | Inserts values into the table $table. If $columns is defined it will be used as a list of columns to insert into. @qvalues is a list of arrays containing values to insert. | ||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_delete_from --> | <!-- Pod2Wiki=item_delete_from --> | ||
====delete_from==== | ====delete_from==== | ||
− | + | $success = $db->delete_from( $table, $columns, @values ) | |
+ | Perform a SQL <tt>DELETE FROM</tt> <tt>$table</tt> using <tt>$columns</tt> to build a where clause. <tt>@values</tt> is a list of array references of values in the same order as <tt>$columns</tt>. | ||
− | + | If you want to clear a table completely use <tt>clear_table()</tt>. | |
− | |||
− | |||
− | If you want to clear a table completely use clear_table(). | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_count_table --> | <!-- Pod2Wiki=item_count_table --> | ||
====count_table==== | ====count_table==== | ||
− | + | $n = $db->count_table( $tablename ) | |
− | + | Return the number of rows in the specified SQL table with <tt>$tablename</tt>. | |
− | |||
− | Return the number of rows in the specified SQL table. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_clear_table --> | <!-- Pod2Wiki=item_clear_table --> | ||
====clear_table==== | ====clear_table==== | ||
− | + | $db->clear_table( $tablename ) | |
− | + | Clears all records from the given table with <tt>$tablename</tt>. Use with caution! | |
− | |||
− | Clears all records from the given table | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_quoting --> | <!-- Pod2Wiki=head_quoting --> | ||
===Quoting=== | ===Quoting=== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_prep_int --> | <!-- Pod2Wiki=item_prep_int --> | ||
====prep_int==== | ====prep_int==== | ||
− | + | $mungedvalue = EPrints::Database::prep_int( $value ) | |
− | + | Escape numerical <tt>$value</tt> for an SQL statement. <tt>undef</tt> becomes <tt>NULL</tt>. Anything else becomes a number (zero if needed). | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_prep_value --> | <!-- Pod2Wiki=item_prep_value --> | ||
====prep_value==== | ====prep_value==== | ||
− | + | $mungedvalue = EPrints::Database::prep_value( $value ) | |
− | + | Escape <tt>$value</tt> for an SQL statement. Modify value such that <tt>"</tt> becomes <tt>\"</tt> and <tt>\</tt> becomes <tt>\\</tt> and <tt>'</tt> becomes <tt>\'</tt>. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_prep_like_value --> | <!-- Pod2Wiki=item_prep_like_value --> | ||
====prep_like_value==== | ====prep_like_value==== | ||
− | + | $mungedvalue = EPrints::Database::prep_like_value( $value ) | |
− | + | Escape <tt>$value</tt> for an SQL <tt>LIKE</tt> clause. In addition to <tt>'</tt> <tt>"</tt> and <tt>\</tt> also escapes <tt>%</tt> and <tt>_</tt>. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_quote_value --> | <!-- Pod2Wiki=item_quote_value --> | ||
====quote_value==== | ====quote_value==== | ||
− | + | $str = $db->quote_value( $value ) | |
+ | Return a quoted version of <tt>$value</tt>. To quote a <tt>LIKE</tt> value you should use: | ||
− | + | $db->quote_value( EPrints::Database::prep_like_value( $foo ) . '%' ); | |
− | + | ||
− | + | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | |
− | + | <span style='display:none'>User Comments</span> | |
− | <!-- Edit below this comment --> | + | <!-- Edit below this comment --> |
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_quote_int --> | <!-- Pod2Wiki=item_quote_int --> | ||
====quote_int==== | ====quote_int==== | ||
− | + | $str = $db->quote_int( $value ) | |
− | + | Return a quoted integer for <tt>$value</tt>. | |
− | |||
− | Return a quoted integer value | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_quote_binary --> | <!-- Pod2Wiki=item_quote_binary --> | ||
====quote_binary==== | ====quote_binary==== | ||
− | + | $str = $db->quote_binary( $bytes ) | |
− | + | Some databases (Oracle/PostgreSQL) require transforms of binary data to work correctly. | |
− | |||
− | Some databases (Oracle/PostgreSQL) require transforms of binary data to work correctly. | ||
− | This method should be called on data containing | + | This method should be called on data <tt>$bytes</tt> containing null bytes or back-slashes before being passed on [[API:EPrints/Database#quote_value|quote_value]]. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_quote_ordervalue --> | <!-- Pod2Wiki=item_quote_ordervalue --> | ||
====quote_ordervalue==== | ====quote_ordervalue==== | ||
− | + | $str = $db->quote_ordervalue( $field, $value ) | |
− | + | Some databases (Oracle) can't order by <tt>CLOB</tt>s so need special treatment when creating the ordervalues tables. This method allows any fixing-up required for string data <tt>$value</tt> for <tt>$field</tt> before it's inserted. | |
− | |||
− | Some databases (Oracle) can't order by | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_quote_identifier --> | <!-- Pod2Wiki=item_quote_identifier --> | ||
====quote_identifier==== | ====quote_identifier==== | ||
− | + | $str = $db->quote_identifier( @parts ) | |
− | + | Quote a database identifier (e.g. table names). Multiple <tt>@parts</tt> will be joined by dots (<tt>.</tt>). | |
− | |||
− | Quote a database identifier (e.g. table names). Multiple @parts will be joined by | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_prepare_regexp --> | <!-- Pod2Wiki=item_prepare_regexp --> | ||
====prepare_regexp==== | ====prepare_regexp==== | ||
− | + | $sql = $db->prepare_regexp( $col, $value ) | |
− | + | The syntax used for regular expressions varies across databases. This method takes two quoted string and returns a SQL expression that will apply the quoted regexp <tt>$value</tt> to the quoted column <tt>$col</tt>. | |
− | |||
− | The syntax used for regular expressions varies across databases. This method takes two | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_sql_as --> | <!-- Pod2Wiki=item_sql_as --> | ||
====sql_as==== | ====sql_as==== | ||
− | + | $sql = $db->sql_AS() | |
− | + | Returns the syntactic glue to use when aliasing. SQL 92 databases will happily use <tt>AS</tt> but some databases (Oracle) will not accept it. | |
− | |||
− | Returns the syntactic glue to use when aliasing. SQL 92 | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_sql_like --> | <!-- Pod2Wiki=item_sql_like --> | ||
====sql_like==== | ====sql_like==== | ||
− | + | $sql = $db->sql_LIKE() | |
− | + | Returns the syntactic glue to use when making a case-insensitive <tt>LIKE</tt>. PostgreSQL requires <tt>ILIKE</tt> while everything else uses <tt>LIKE</tt> and the column collation. | |
− | |||
− | Returns the syntactic glue to use when making a case-insensitive LIKE. PostgreSQL requires | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_counters --> | <!-- Pod2Wiki=head_counters --> | ||
===Counters=== | ===Counters=== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_counter_current --> | <!-- Pod2Wiki=item_counter_current --> | ||
====counter_current==== | ====counter_current==== | ||
− | + | $n = $db->counter_current( $counter ) | |
− | + | Return the value of the previous counter_next on <tt>$counter</tt>. | |
− | |||
− | Return the value of the previous counter_next on $counter. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_counter_next --> | <!-- Pod2Wiki=item_counter_next --> | ||
====counter_next==== | ====counter_next==== | ||
− | + | $n = $db->counter_next( $counter ) | |
− | + | Return the next unused value for the named <tt>$counter</tt>. Returns <tt>undef</tt> if the <tt>$counter</tt> doesn't exist. | |
− | |||
− | Return the next unused value for the named counter. Returns undef if | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_counter_minimum --> | <!-- Pod2Wiki=item_counter_minimum --> | ||
====counter_minimum==== | ====counter_minimum==== | ||
− | + | $db->counter_minimum( $counter, $value ) | |
− | + | Ensure that the <tt>$counter</tt> is set no lower than <tt>$value</tt>. This is used when importing eprints which may not be in scrict sequence. | |
− | |||
− | Ensure that the counter is set no lower than $value. This is used when importing eprints which may not be in scrict sequence. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_counter_reset --> | <!-- Pod2Wiki=item_counter_reset --> | ||
====counter_reset==== | ====counter_reset==== | ||
− | + | $db->counter_reset( $counter ) | |
− | + | Reset the <tt>$counter</tt>. Use with caution. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_next_doc_pos --> | <!-- Pod2Wiki=item_next_doc_pos --> | ||
====next_doc_pos==== | ====next_doc_pos==== | ||
− | + | $n = $db->next_doc_pos( $eprintid ) | |
− | + | Return the next unused document position for the given <tt>$eprintid</tt>. | |
− | |||
− | Return the next unused document | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_dataset_data --> | <!-- Pod2Wiki=head_dataset_data --> | ||
− | ===Dataset | + | ===Dataset Data=== |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_exists --> | <!-- Pod2Wiki=item_exists --> | ||
====exists==== | ====exists==== | ||
− | + | $boolean = $db->exists( $dataset, $id ) | |
− | + | Return <tt>true</tt> if there exists an [[API:EPrints/DataObj|EPrints::DataObj]] from the <tt>$dataset</tt> with its primary key set to <tt>$id</tt>. Otherwise, return <tt>false</tt>. | |
− | </ | ||
− | |||
− | |||
− | < | ||
− | |||
− | |||
− | < | ||
− | < | ||
− | |||
− | |||
− | < | ||
− | |||
− | </ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
− | ==== | + | <!-- Pod2Wiki=item_add_record --> |
+ | ====add_record==== | ||
− | + | $success = $db->add_record( $dataset, $data ) | |
− | + | Add the given <tt>$data</tt> as a new record in the given <tt>$dataset</tt>. <tt>$data</tt> is a reference to a hash containing values structured for a record in the that <tt>$dataset</tt>. | |
− | </ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_remove --> | <!-- Pod2Wiki=item_remove --> | ||
====remove==== | ====remove==== | ||
− | + | $success = $db->remove( $dataset, $id ) | |
− | + | Attempts to remove the [[API:EPrints/DataObj|EPrints::DataObj]] with the primary key <tt>$id</tt> from the specified <tt>$dataset</tt>. | |
− | |||
− | |||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_searching_caching_and_object_retrieval --> | <!-- Pod2Wiki=head_searching_caching_and_object_retrieval --> | ||
===Searching, caching and object retrieval=== | ===Searching, caching and object retrieval=== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_cache_exp --> | <!-- Pod2Wiki=item_cache_exp --> | ||
====cache_exp==== | ====cache_exp==== | ||
− | + | $searchexp = $db->cache_exp( $cacheid ) | |
− | + | Return the serialised search of a the cached search with <tt>$cacheid</tt>. Return <tt>undef</tt> if the <tt>$cacheid</tt> is invalid or expired. | |
− | |||
− | Return the serialised | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_cache --> | <!-- Pod2Wiki=item_cache --> | ||
====cache==== | ====cache==== | ||
− | + | $cacheid = $db->cache( $searchexp, $dataset, $srctable, [$order], [$list] ) | |
− | + | Create a cache of the specified search expression from the SQL table <tt>$srctable</tt>. | |
− | |||
− | Create a cache of the specified search expression from the SQL table $srctable. | ||
− | If $order is set then the cache is ordered by the specified fields. For example | + | If <tt>$order</tt> is set then the cache is ordered by the specified fields. For example <tt>-year/title</tt> orders by year (descending). Records with the same year are ordered by title. |
− | If $srctable is set to | + | If <tt>$srctable</tt> is set to <tt>LIST</tt> then order is ignored and the list of IDs is taken from the array reference <tt>$list</tt>. |
− | If $srctable is set to | + | If <tt>$srctable</tt> is set to <tt>ALL</tt> every matching record from $dataset is added to the cache, optionally ordered by <tt>$order</tt>. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_cache_table --> | <!-- Pod2Wiki=item_cache_table --> | ||
====cache_table==== | ====cache_table==== | ||
− | < | + | $tablename = $db->cache_table( $id ) |
+ | Return the name of the SQL table used to store the cache with <tt>$id</tt>. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_cache_userid --> | ||
+ | ====cache_userid==== | ||
+ | |||
+ | $userid = $db->cache_userid( $id ) | ||
+ | Returns the <tt>userid</tt> associated with the cache with <tt>$id</tt> if that cache exists. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_get_cachemap --> | ||
+ | ====get_cachemap==== | ||
− | + | $cachemap = $db->get_cachemap( $id ) | |
− | Return the | + | Return the cachemap with $<id>. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_search --> | <!-- Pod2Wiki=item_search --> | ||
====search==== | ====search==== | ||
− | + | $ids = $db->search( $keyfield, $tables, $conditions, [ $main_table_alias ] ) | |
− | + | Return a reference to an array of <tt>$keyfield</tt> IDs - the results of the search specified by <tt>$conditions</tt> across the tables specified in the <tt>$tables</tt> hash where keys are tables aliases and values are table names. | |
− | |||
− | Return a reference to an array of | ||
− | If no | + | If no <tt>$main_table_alias</tt> is specified then <tt>M</tt> is assumed. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_drop_cache --> | <!-- Pod2Wiki=item_drop_cache --> | ||
====drop_cache==== | ====drop_cache==== | ||
− | + | $db->drop_cache( $id ) | |
− | + | Remove the cached search with the given <tt>$id</tt>. | |
− | |||
− | Remove the cached search with the given id. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_from_cache --> | <!-- Pod2Wiki=item_from_cache --> | ||
====from_cache==== | ====from_cache==== | ||
− | + | $items = $db->from_cache( $dataset, $cacheid, [ $offset, $count, $justids ] ) | |
− | + | Return a reference to an array containing all the items from the given <tt>$dataset</tt> that have IDs in the cache specified by <tt>$cacheid</tt>. The cache may be specified either by ID or serialised search expression. | |
− | |||
− | Return a reference to an array containing all the items from the given dataset that have | ||
− | $offset is an offset from the start of the cache and $count is the number of records to return. | + | <tt>$offset</tt> is an offset from the start of the cache and <tt>$count</tt> is the number of records to return. |
− | If $justids is true then it returns just | + | If <tt>$justids</tt> is <tt>true</tt> then it returns just a reference to an array of the record IDs and not the objects themselves. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_drop_orphan_cache_tables --> | <!-- Pod2Wiki=item_drop_orphan_cache_tables --> | ||
====drop_orphan_cache_tables==== | ====drop_orphan_cache_tables==== | ||
− | + | $c = $db->drop_orphan_cache_tables | |
− | + | Drop tables called <tt>cacheXXX</tt> where <tt>XXX</tt> is an integer. Returns the number of cache tables dropped. | |
− | |||
− | Drop tables called | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_single --> | <!-- Pod2Wiki=item_get_single --> | ||
====get_single==== | ====get_single==== | ||
− | + | $obj = $db->get_single( $dataset, $id ) | |
− | + | Return a single <EPrints::DataObj> from the given <tt>$dataset</tt> with primary key set to <tt>$id</tt>. | |
− | |||
− | Return a single | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_all --> | <!-- Pod2Wiki=item_get_all --> | ||
====get_all==== | ====get_all==== | ||
− | + | $items = $db->get_all( $dataset ) | |
− | + | Returns a reference to an array with all the <EPrints::DataObj>s from the given <tt>$dataset</tt>. | |
− | |||
− | Returns a reference to an array with all the | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_cache_ids --> | <!-- Pod2Wiki=item_get_cache_ids --> | ||
====get_cache_ids==== | ====get_cache_ids==== | ||
− | + | @ids = $db->get_cache_ids( $dataset, $cachemap, $offset, $count ) | |
− | + | Returns a list of <tt>$count</tt> IDs from <tt>$cache_id</tt> starting at <tt>$offset</tt> and in the order in the <tt>$cachemap</tt>. | |
− | |||
− | Returns a list of $count | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_dataobjs --> | <!-- Pod2Wiki=item_get_dataobjs --> | ||
====get_dataobjs==== | ====get_dataobjs==== | ||
− | + | @dataobjs = $db->get_dataobjs( $dataset, [ $id, $id, ... ] ) | |
− | + | Retrieves the records in <tt>$dataset</tt> with the given <tt>$id</tt>(s). If an <tt>$id</tt> doesn't exist in the database it will be ignored. | |
− | |||
− | Retrieves the records in $dataset with the given $id(s). If an $id doesn't exist in the database it will be ignored. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_values --> | <!-- Pod2Wiki=item_get_values --> | ||
====get_values==== | ====get_values==== | ||
− | + | $values = $db->get_values( $field, $dataset ) | |
+ | Return a reference to an array of all the distinct values of the [[API:EPrints/MetaField|EPrints::MetaField]] <tt>$field</tt> for the <tt>$dataset</tt> specified. | ||
− | </ | + | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> |
− | + | <span style='display:none'>User Comments</span> | |
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_sort_values --> | ||
+ | ====sort_values==== | ||
+ | $values = $db->sort_values( $field, $values, [ $langid ] ) | ||
+ | Sorts and returns the list of <tt>$values</tt> using the database. | ||
+ | |||
+ | <tt>$field</tt> is used to get the order value for each value. <tt>$langid</tt> (or $session->get_langid if unset) is used to determine the database collation to use when sorting the resulting order values. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_ids_by_field_values --> | <!-- Pod2Wiki=item_get_ids_by_field_values --> | ||
====get_ids_by_field_values==== | ====get_ids_by_field_values==== | ||
− | + | $ids = $db->get_ids_by_field_values( $field, $dataset, [ %opts ] ) | |
− | + | Return a reference to a hash table where the keys are specified <tt>$datasets</tt>'s <tt>$field</tt> value IDs and the values are references to arrays of IDs. | |
− | |||
− | Return a reference to a hash table where the keys are field value | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_dequeue_events --> | <!-- Pod2Wiki=item_dequeue_events --> | ||
====dequeue_events==== | ====dequeue_events==== | ||
− | + | @events = $db->dequeue_events( $n ) | |
+ | Attempt to dequeue upto <tt>$n</tt> events. May return between <tt>0</tt> and <tt>$n</tt> events depending on parallel processes and how many events are remaining in the queue. | ||
− | </ | + | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> |
− | + | <span style='display:none'>User Comments</span> | |
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_ci_lookup --> | ||
+ | ====ci_lookup==== | ||
+ | |||
+ | $value = $db->ci_lookup( $field, $value ) | ||
+ | This is a hacky method to support case-insensitive lookup for usernames, emails, etc. It returns the actual case-sensitive version of <tt>$value</tt> if there is a case-insensitive match for the <tt>$field</tt>. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
− | ===Password Validation=== | + | <!-- Pod2Wiki=head_password_validation_and_secret_fields --> |
+ | ===Password Validation and Secret Fields=== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_valid_login --> | <!-- Pod2Wiki=item_valid_login --> | ||
====valid_login==== | ====valid_login==== | ||
− | + | $db->valid_login( $username, $password ) | |
+ | Returns whether the clear-text <tt>$password</tt> matches the stored crypted password for the <tt>$username</tt>. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
− | |||
− | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=item_secret_matches --> | ||
+ | ====secret_matches==== | ||
+ | $db->secret_matches( $dataobj, $fieldname, $token [, $callback ] ) | ||
+ | Returns whether the clear-text <tt>$token</tt> matches the stored crypted field with <tt>$fieldname</tt> for the <tt>$dataobj</tt> according to the <tt>$callback</tt> function. | ||
+ | |||
+ | If not set, <tt>$callback</tt> defaults to [[API:EPrints/Utils#crypt_equals|EPrints::Utils#crypt_equals]]. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_is_secret_set --> | ||
+ | ====is_secret_set==== | ||
+ | |||
+ | $boolean = $db->is_secret_set( $dataobj, $fieldname ) | ||
+ | Returns a boolean for whether the secret <tt>$fieldname</tt> for <tt>$dataobj</tt> has a value set. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_database_schema_manipulation --> | <!-- Pod2Wiki=head_database_schema_manipulation --> | ||
− | ===Database | + | ===Database Schema Manipulation=== |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_has_sequence --> | <!-- Pod2Wiki=item_has_sequence --> | ||
====has_sequence==== | ====has_sequence==== | ||
− | + | $boolean = $db->has_sequence( $name ) | |
− | + | Returns <tt>true</tt> if a sequence of the given <tt>$name</tt> exists in the database. Otherwise, returns <tt>false</tt>. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_sequence --> | <!-- Pod2Wiki=item_create_sequence --> | ||
====create_sequence==== | ====create_sequence==== | ||
− | + | $success = $db->create_sequence( $name ) | |
− | + | Creates a new sequence object with <tt>$name</tt> and initialises to zero. | |
− | |||
− | Creates a new sequence object | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_drop_sequence --> | <!-- Pod2Wiki=item_drop_sequence --> | ||
====drop_sequence==== | ====drop_sequence==== | ||
− | + | $success = $db->drop_sequence( $name ) | |
− | + | Deletes a sequence object with <tt>$name</tt>. | |
− | |||
− | Deletes a sequence object. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_has_column --> | <!-- Pod2Wiki=item_has_column --> | ||
====has_column==== | ====has_column==== | ||
− | + | $boolean = $db->has_column( $table, $column ) | |
− | + | Return <tt>true</tt> if the named <tt>$table</tt> has the named <tt>$column</tt> in the database. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_drop_column --> | <!-- Pod2Wiki=item_drop_column --> | ||
====drop_column==== | ====drop_column==== | ||
− | + | $success = $db->drop_column( $table, $column ) | |
− | + | Drops the named <tt>$column</tt> from the named <tt>$table</tt>. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_primary_key --> | <!-- Pod2Wiki=item_get_primary_key --> | ||
====get_primary_key==== | ====get_primary_key==== | ||
− | + | @columns = $db->get_primary_key( $tablename ) | |
− | + | Returns a list of column names that comprise the primary key for the <tt>$tablename</tt>. | |
− | |||
− | Returns | ||
− | Returns empty list if no primary key exists. | + | Returns an empty list if no primary key exists. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
− | ==== | + | <!-- Pod2Wiki=item_index_name --> |
+ | ====index_name==== | ||
− | + | $name = $db->index_name( $table, @cols ) | |
+ | Returns the name of the first index that starts with named columns <tt>@cols</tt> in the named <tt>$table</tt>. | ||
− | </ | + | Returns <tt>undef</tt> if no index exists. |
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
− | ==== | + | <!-- Pod2Wiki=item_get_index_ids --> |
+ | ====get_index_ids==== | ||
− | + | $ids = $db->get_index_ids( $table, $condition ) | |
− | + | Return a reference to an array of the distinct primary keys from the named SQL <tt>$table</tt> which match the specified <tt>$condition</tt>. | |
− | </ | ||
− | |||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_index --> | <!-- Pod2Wiki=item_create_index --> | ||
====create_index==== | ====create_index==== | ||
− | + | $success = $db->create_index( $table, @columns ) | |
− | + | Creates an index over <tt>@columns</tt> for named <tt>$table</tt>. Returns <tt>true</tt> on success, <tt>false</tt> otherwise. | |
− | |||
− | Creates an index over @columns for $ | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_unique_index --> | <!-- Pod2Wiki=item_create_unique_index --> | ||
====create_unique_index==== | ====create_unique_index==== | ||
− | + | $success = $db->create_unique_index( $tablename, @columns ) | |
− | + | Creates a unique index over <tt>@columns</tt> for named <tt>$table</tt>. Returns <tt>true</tt> on success, <tt>false</tt> otherwise. | |
− | |||
− | Creates a unique index over @columns for $ | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_foreign_key --> | <!-- Pod2Wiki=item_create_foreign_key --> | ||
====create_foreign_key==== | ====create_foreign_key==== | ||
− | + | $ok = $db->create_foreign_key( $main_table, $table, $key_field ) | |
− | + | Create a foreign key relationship between named <tt>$main_table</tt> and named <tt>$table</tt> using <tt>$key_field</tt>. | |
− | |||
− | Create a foreign key relationship between $main_table and $ | ||
− | This will cause records in $ | + | This will cause records in <tt>$table</tt> to be deleted if the equivalent record is deleted from <tt>$main_table</tt>. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_get_tables --> | <!-- Pod2Wiki=item_get_tables --> | ||
====get_tables==== | ====get_tables==== | ||
− | + | @tables = $db->get_tables( [ $dbname ] ) | |
+ | Returns a list of all the tables in the database. | ||
− | </ | + | <tt>$dbname</tt> specifies a particular database name of current connection has access to more than one database. |
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_has_table --> | <!-- Pod2Wiki=item_has_table --> | ||
====has_table==== | ====has_table==== | ||
− | + | $boolean = $db->has_table( $tablename ) | |
− | + | Returns boolean dependent on whether a table of the <tt>$tablename</tt> exists in the database. | |
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_table --> | <!-- Pod2Wiki=item_create_table --> | ||
====create_table==== | ====create_table==== | ||
− | + | $success = $db->create_table( $tablename, $setkey, @fields ); | |
− | + | Creates a new table with <tt>$tablename</tt> based on <tt>@fields</tt>. | |
− | |||
− | Creates a new table $tablename based on @fields. | ||
− | The first $setkey number of fields are used for | + | The first <tt>$setkey</tt> number of fields are used for its primary key. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_drop_table --> | <!-- Pod2Wiki=item_drop_table --> | ||
====drop_table==== | ====drop_table==== | ||
− | + | $db->drop_table( @tables ) | |
− | + | Delete the named <tt>@tables</tt>. Use with caution! | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_rename_table --> | <!-- Pod2Wiki=item_rename_table --> | ||
====rename_table==== | ====rename_table==== | ||
− | + | $db->rename_table( $table_from, $table_to ) | |
− | + | Renames the table named <tt>$table_from</tt> to <tt>$table_to</tt>. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_swap_table --> | <!-- Pod2Wiki=item_swap_table --> | ||
====swap_table==== | ====swap_table==== | ||
− | + | $db->swap_table( $table_a, $table_b ) | |
− | + | Renames table named <tt>$table_a</tt> to <tt>$table_b</tt> and vice-versa. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=head_eprints_schema_manipulation --> | <!-- Pod2Wiki=head_eprints_schema_manipulation --> | ||
− | ===EPrints | + | ===EPrints Schema Manipulation=== |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_archive_tables --> | <!-- Pod2Wiki=item_create_archive_tables --> | ||
====create_archive_tables==== | ====create_archive_tables==== | ||
− | + | $success = $db->create_archive_tables() | |
− | + | Create all the SQL tables for all datasets. | |
− | |||
− | Create all the SQL tables for | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_drop_archive_tables --> | <!-- Pod2Wiki=item_drop_archive_tables --> | ||
====drop_archive_tables==== | ====drop_archive_tables==== | ||
− | + | $db->drop_archive_tables() | |
− | + | Destroy all tables used by EPrints in the database. | |
− | |||
− | Destroy all tables used by | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_version_table --> | <!-- Pod2Wiki=item_create_version_table --> | ||
====create_version_table==== | ====create_version_table==== | ||
− | + | $db->create_version_table | |
− | + | Make the version table (and set the only value to be the current version of EPrints). | |
− | |||
− | Make the version table (and set the only value to be the current version of | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_drop_version_table --> | <!-- Pod2Wiki=item_drop_version_table --> | ||
====drop_version_table==== | ====drop_version_table==== | ||
− | + | $db->drop_version_table | |
− | |||
− | |||
Drop the version table. | Drop the version table. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_has_dataset --> | <!-- Pod2Wiki=item_has_dataset --> | ||
====has_dataset==== | ====has_dataset==== | ||
− | + | $db->has_dataset( $dataset ) | |
+ | Returns <tt>true</tt> if <tt>$dataset</tt> exists in the database and has all expected tables including ordervalues and index tables. | ||
+ | |||
+ | This does not check that all fields are configured - see </has_field>. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
− | </ | + | <!-- Pod2Wiki= --> |
− | + | </div> | |
+ | <!-- Pod2Wiki=item_has_dataset_index_tables --> | ||
+ | ====has_dataset_index_tables==== | ||
− | + | $db->has_dataset_index_tables( $dataset ) | |
+ | Returns <tt>true</tt> if index tables for <tt>$dataset</tt> exists of if this is not indexable. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_dataset_tables --> | <!-- Pod2Wiki=item_create_dataset_tables --> | ||
====create_dataset_tables==== | ====create_dataset_tables==== | ||
− | + | $success = $db->create_dataset_tables( $dataset ) | |
+ | Creates all the SQL tables for the specified <tt>$dataset</tt>. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
− | |||
− | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=item_drop_dataset_tables --> | ||
+ | ====drop_dataset_tables==== | ||
− | + | $db->drop_dataset_tables( $dataset ) | |
+ | Drops all the SQL tables for the specified <tt>$dataset</tt>. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
− | ==== | + | <!-- Pod2Wiki=item_create_dataset_index_tables --> |
+ | ====create_dataset_index_tables==== | ||
+ | |||
+ | $success = $db->create_dataset_index_tables( $dataset ) | ||
+ | Creates all the index tables for the specified <tt>$dataset</tt>. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
− | |||
− | </ | + | <!-- Pod2Wiki= --> |
− | + | </div> | |
+ | <!-- Pod2Wiki=item_create_dataset_ordervalues_tables --> | ||
+ | ====create_dataset_ordervalues_tables==== | ||
+ | $success = $db->create_dataset_ordervalues_tables( $dataset ) | ||
+ | Creates all the ordervalues tables for the specified <tt>$dataset</tt>. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_has_field --> | <!-- Pod2Wiki=item_has_field --> | ||
====has_field==== | ====has_field==== | ||
− | + | $db->has_field( $dataset, $field ) | |
− | + | Returns <tt>true</tt> if <tt>$field</tt> is in the database for <tt>$dataset</tt>. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_add_field --> | <!-- Pod2Wiki=item_add_field --> | ||
====add_field==== | ====add_field==== | ||
− | + | $db->add_field( $dataset, $field, [ $force ] ) | |
+ | Add <tt>$field</tt> to <tt>$dataset</tt>'s tables. | ||
− | < | + | If <tt>$force</tt> is <tt>true</tt> modify/replace an existing column. Use with care! |
− | |||
− | |||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_remove_field --> | <!-- Pod2Wiki=item_remove_field --> | ||
====remove_field==== | ====remove_field==== | ||
− | + | $db->remove_field( $dataset, $field ) | |
− | + | Remove <tt>$field</tt> from <tt>$dataset</tt>'s tables. | |
− | < | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_rename_field --> | <!-- Pod2Wiki=item_rename_field --> | ||
====rename_field==== | ====rename_field==== | ||
− | + | $ok = $db->rename_field( $dataset, $field, $old_name ) | |
− | + | Rename the <tt>$field</tt> in the <tt>$dataset</tt> from its <tt>$old_name</tt>. | |
− | < | ||
− | |||
− | Returns true if the field | + | Returns <tt>true</tt> if the <tt>$field</tt> is successfully renamed. |
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_counters --> | <!-- Pod2Wiki=item_create_counters --> | ||
====create_counters==== | ====create_counters==== | ||
− | + | $success = $db->create_counters | |
− | + | Create the counters used to store the highest current ID of eprints, users, etc. | |
− | |||
− | Create the counters used to store the highest current | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_has_counter --> | <!-- Pod2Wiki=item_has_counter --> | ||
====has_counter==== | ====has_counter==== | ||
− | + | $success = $db->has_counter( $counter ) | |
− | + | Returns <tt>true</tt> if <tt>$counter</tt> exists. | |
− | </ | ||
− | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_create_counter --> | <!-- Pod2Wiki=item_create_counter --> | ||
====create_counter==== | ====create_counter==== | ||
− | + | $success = $db->create_counter( $name ) | |
− | + | Create and initialise to zero a new counter with <tt>$name</tt>. | |
− | |||
− | Create and initialise to zero a new counter | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_remove_counters --> | <!-- Pod2Wiki=item_remove_counters --> | ||
====remove_counters==== | ====remove_counters==== | ||
− | + | $success = $db->remove_counters | |
− | |||
− | |||
Destroy all counters. | Destroy all counters. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
<!-- Pod2Wiki=item_drop_counter --> | <!-- Pod2Wiki=item_drop_counter --> | ||
====drop_counter==== | ====drop_counter==== | ||
− | + | $success = $db->drop_counter( $name ) | |
+ | Destroy the counter named <tt>$name</tt>. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
− | |||
− | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=head_user_messages --> | ||
+ | ===User Messages=== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
− | == | + | <!-- Pod2Wiki=item_save_user_message --> |
− | + | ====save_user_message==== | |
+ | |||
+ | $message = $db->save_user_message( $userid, $m_type, $dom_m_data ) | ||
+ | Save user message provided in XML DOM object <tt>$dom_m_data</tt> as a sanitized string in a [[API:EPrints/DataObj/Message|EPrints::DataObj::Message]] using <tt>$m_type</tt> to define the message type and <tt>$userid</tt> for the ID of the user whose message it is. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_get_user_messages --> | ||
+ | ====get_user_messages==== | ||
+ | |||
+ | @messages = $db->get_user_messages( $userid, %opts ) | ||
+ | Get the messages for a user with ID <tt>$userid</tt> and clear messages if <tt>$opt{clear}</tt> is set. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
− | == | + | <!-- Pod2Wiki=item_clear_user_messages --> |
− | + | ====clear_user_messages==== | |
− | + | $db->clear_user_messages( $userid ) | |
+ | Clear all messages for user with ID <tt>$userid</tt>. | ||
− | + | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | |
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
− | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=head_see_also --> | ||
+ | ==SEE ALSO== | ||
+ | To access database-stored objects use the methods provided by the following modules: [[API:EPrints/Repository|EPrints::Repository]], [[API:EPrints/DataSet|EPrints::DataSet]]. | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
− | <!-- Pod2Wiki= | + | </div> |
+ | <!-- Pod2Wiki=head_copyright --> | ||
+ | ==COPYRIGHT== | ||
+ | {{API:Copyright}} | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
<!-- Edit below this comment --> | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=_postamble_ --><!-- Edit below this comment --> |
Latest revision as of 21:20, 4 March 2022
EPrints 3 Reference: Directory Structure - Metadata Fields - Repository Configuration - XML Config Files - XML Export Format - EPrints data structure - Core API - Data Objects
Latest Source Code (3.4, 3.3) | Revision Log | Before editing this page please read Pod2Wiki
Contents
- 1 NAME
- 2 DESCRIPTION
- 3 CONSTANTS
- 4 INSTANCE VARIABLES
- 5 METHODS
- 5.1 Database
- 5.1.1 new
- 5.1.2 create
- 5.1.3 build_connection_string
- 5.1.4 connect
- 5.1.5 disconnect
- 5.1.6 set_debug
- 5.1.7 set_version
- 5.1.8 get_version
- 5.1.9 is_latest_version
- 5.1.10 get_server_version
- 5.1.11 get_default_charset
- 5.1.12 get_default_collation
- 5.1.13 get_driver_name
- 5.1.14 error
- 5.1.15 retry_error
- 5.1.16 duplicate_error
- 5.1.17 begin
- 5.1.18 commit
- 5.1.19 rollback
- 5.1.20 type_info
- 5.1.21 get_column_type
- 5.2 Basic SQL Operations
- 5.3 Quoting
- 5.4 Counters
- 5.5 Dataset Data
- 5.6 Searching, caching and object retrieval
- 5.6.1 cache_exp
- 5.6.2 cache
- 5.6.3 cache_table
- 5.6.4 cache_userid
- 5.6.5 get_cachemap
- 5.6.6 search
- 5.6.7 drop_cache
- 5.6.8 from_cache
- 5.6.9 drop_orphan_cache_tables
- 5.6.10 get_single
- 5.6.11 get_all
- 5.6.12 get_cache_ids
- 5.6.13 get_dataobjs
- 5.6.14 get_values
- 5.6.15 sort_values
- 5.6.16 get_ids_by_field_values
- 5.6.17 dequeue_events
- 5.6.18 ci_lookup
- 5.7 Password Validation and Secret Fields
- 5.8 Database Schema Manipulation
- 5.8.1 has_sequence
- 5.8.2 create_sequence
- 5.8.3 drop_sequence
- 5.8.4 has_column
- 5.8.5 drop_column
- 5.8.6 get_primary_key
- 5.8.7 index_name
- 5.8.8 get_index_ids
- 5.8.9 create_index
- 5.8.10 create_unique_index
- 5.8.11 create_foreign_key
- 5.8.12 get_tables
- 5.8.13 has_table
- 5.8.14 create_table
- 5.8.15 drop_table
- 5.8.16 rename_table
- 5.8.17 swap_table
- 5.9 EPrints Schema Manipulation
- 5.9.1 create_archive_tables
- 5.9.2 drop_archive_tables
- 5.9.3 create_version_table
- 5.9.4 drop_version_table
- 5.9.5 has_dataset
- 5.9.6 has_dataset_index_tables
- 5.9.7 create_dataset_tables
- 5.9.8 drop_dataset_tables
- 5.9.9 create_dataset_index_tables
- 5.9.10 create_dataset_ordervalues_tables
- 5.9.11 has_field
- 5.9.12 add_field
- 5.9.13 remove_field
- 5.9.14 rename_field
- 5.9.15 create_counters
- 5.9.16 has_counter
- 5.9.17 create_counter
- 5.9.18 remove_counters
- 5.9.19 drop_counter
- 5.10 User Messages
- 5.1 Database
- 6 SEE ALSO
- 7 COPYRIGHT
NAME
EPrints::Database - a connection to the SQL database for an eprints session.
DESCRIPTION
EPrints Database Access Module
Provides access to the backend database. All database access done via this module, in the hope that the backend can be replaced as easily as possible.
In most use-cases it should not be necessary to use the database module directly. Instead you should use EPrints::DataSet or EPrints::MetaField accessor methods to access objects and field values respectively.
Cross-database Support
Any use of SQL statements must use quote_identifier to quote database tables and columns and quote_value to quote values. The only exception to this are the EPrints::Database::* modules which provide database-driver specific extensions.
Quoting SQL Values
By convention variables that contain already quoted values are prefixed with Q_ so they can be easily recognised when used in string interpolation:
my $Q_value = $db->quote_value( "Hello, World!" ); $db->do("SELECT $Q_value");
Where possible you should avoid quoting values yourself, instead use a method that accepts unquoted values which will (safely) do the work for you.
CONSTANTS
All the SQL_ column types defined by Perl module DBI and the following:
SQL_NULL
A column value is undefined.
SQL_NOT_NULL
A column value is defined.
INSTANCE VARIABLES
$self->{session}
The EPrints::Session which is associated with this database connection.
$self->{debug}
If true then SQL is logged.
$self->{dbh}
The handle on the actual database connection.
METHODS
Database
new
$db = EPrints::Database->new( $repo, [ %opts ] )
Create a connection to the database.
Options:
db_connect - Boolean. Also connect to the database (default: true).
create
$db = $db->create( $username, $password )
Create and connect to a new database using user account $username and $password.
build_connection_string
$dbstr = EPrints::Database::build_connection_string( %params )
Build the string to use to connect to the database via DBI.
Parameters:
dbname - Database name (REQUIRED). dbdriver - Database driver (e.g. mysql, Oracle, pgsql, default: mysql). dbhost - Database host. Assumes localhost if unset. dbport - Port to connect to database host. Assumes default for driver if unset. dbsock - Socket file to connect to database through.
connect
$db->connect()
Connects to the database.
disconnect
$db->disconnect()
Disconnects from the EPrints database. Should always be done before any script exits.
set_debug
$db->set_debug( $boolean )
Set the SQL debug mode to true or false.
set_version
$db->set_version( $versionid );
Set the version id table in the SQL database to the given versionid (used by the upgrade script).
get_version
$version = $db->get_version
Returns the current database schema version.
is_latest_version
$boolean = $db->is_latest_version
Return true if the SQL tables are in the correct configuration for this edition of eprints. Otherwise, false.
get_server_version
$version = $db->get_server_version
Return the database server version.
get_default_charset
$charset = $db->get_default_charset
Return the character set to use.
Returns undef if character sets are unsupported.
get_default_collation
$collation = $db->get_default_collation( $lang )
Return the collation to use for language $lang.
Returns undef if collation is unsupported.
get_driver_name
$driver = $db->get_driver_name
Return the database driver name.
error
$errstr = $db->error()
Return a string describing the last SQL error.
retry_error
$boolean = $db->retry_error()
Returns a boolean for whether the database error is a retry error.
duplicate_error
$boolean = $db->duplicate_error()
Returns a boolean for whether the database error is a duplicate error.
begin
$db->begin()
Begin a transaction.
commit
$db->commit()
Commit the previously begun transaction.
rollback
$db->rollback()
Rollback the partially completed transaction.
type_info
$type_info = $db->type_info( $data_type )
See DBI/type_info.
get_column_type
$real_type = $db->get_column_type( $name, $data_type, $not_null, [ $length, $scale, %opts ] )
Returns a SQL column definition for $name of type $type, usually something like:
$name $type($length,$scale) [ NOT NULL ]
If $not_null is true column will be set to NOT NULL.
$length and $scale control the maximum lengths of character or decimal types (see below).
Other options available to refine the column definition:
langid - character set/collation to use sorted - whether this column will be used to order by
langid is mapped to real database values by the "dblanguages" configuration option. The database may not be able to order the request column type in which case, if sorted is true, the database may use a substitute column type.
$data_type is the SQL type. The types are constants defined by this module, to import them use:
use EPrints::Database qw( :sql_types );
Supported types (n = requires $length argument):
Character data: SQL_VARCHAR(n), SQL_LONGVARCHAR, SQL_CLOB.
Binary data: SQL_VARBINARY(n), SQL_LONGVARBINARY.
Integer data: SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT.
Floating-point data: SQL_REAL, SQL_DOUBLE.
Time data: SQL_DATE, SQL_TIME.
The actual column types used will be database-specific.
Basic SQL Operations
do
$success = $db->do( $sql )
Execute the given $sql.
prepare
$sth = $db->prepare( $sql )
Prepare the given $sql and return a handle on it.
Use the execute method on the returned DBI handle to execute the SQL:
my $sth = $db->prepare_select( "SELECT 'Hello, World'" ); $sth->execute;
prepare_select
$sth = $db->prepare_select( $sql, [ %options ] )
Prepare a SELECT statement $sql and return a handle to it. After preparing a statement use execute() to execute it.
Returns a DBI statement handle.
The LIMIT SQL keyword is not universally supported, to specify this use the limit option.
Options:
limit - limit the number of rows returned offset - return limit number of rows after offset
execute
$success = $db->execute( $sth, $sql )
Execute the SQL prepared earlier in the $sth. $sql is only required for debugging purposes.
update
$success = $db->update( $dataset, $data, $changed )
Updates a EPrints::DataObj from $dataset with the given $data. The primary key field (e.g. eprintid) value must be included.
Updates the ordervalues if the $dataset is ordered.
_update
$rows = $db->_update( $tablename, $keycols, $keyvals, $columns, @values )
Updates $columns in $tablename with @values where $keycols equals $keyvals and returns the number of rows affected.
N.B. If no rows are affected, the result is still true, see DBI's execute() method.
This is an internal method.
insert
$success = $db->insert( $table, $columns, @values )
Inserts @values into the table $table. If $columns is defined it will be used as a list of columns to insert into. @values is a list of arrays containing values to insert. These will be quoted before insertion.
insert_quoted
$success = $db->insert_quoted( $table, $columns, @qvalues )
Inserts values into the table $table. If $columns is defined it will be used as a list of columns to insert into. @qvalues is a list of arrays containing values to insert. These will NOT be quoted before insertion - care must be exercised!
delete_from
$success = $db->delete_from( $table, $columns, @values )
Perform a SQL DELETE FROM $table using $columns to build a where clause. @values is a list of array references of values in the same order as $columns.
If you want to clear a table completely use clear_table().
count_table
$n = $db->count_table( $tablename )
Return the number of rows in the specified SQL table with $tablename.
clear_table
$db->clear_table( $tablename )
Clears all records from the given table with $tablename. Use with caution!
Quoting
prep_int
$mungedvalue = EPrints::Database::prep_int( $value )
Escape numerical $value for an SQL statement. undef becomes NULL. Anything else becomes a number (zero if needed).
prep_value
$mungedvalue = EPrints::Database::prep_value( $value )
Escape $value for an SQL statement. Modify value such that " becomes \" and \ becomes \\ and ' becomes \'.
prep_like_value
$mungedvalue = EPrints::Database::prep_like_value( $value )
Escape $value for an SQL LIKE clause. In addition to ' " and \ also escapes % and _.
quote_value
$str = $db->quote_value( $value )
Return a quoted version of $value. To quote a LIKE value you should use:
$db->quote_value( EPrints::Database::prep_like_value( $foo ) . '%' );
quote_int
$str = $db->quote_int( $value )
Return a quoted integer for $value.
quote_binary
$str = $db->quote_binary( $bytes )
Some databases (Oracle/PostgreSQL) require transforms of binary data to work correctly.
This method should be called on data $bytes containing null bytes or back-slashes before being passed on quote_value.
quote_ordervalue
$str = $db->quote_ordervalue( $field, $value )
Some databases (Oracle) can't order by CLOBs so need special treatment when creating the ordervalues tables. This method allows any fixing-up required for string data $value for $field before it's inserted.
quote_identifier
$str = $db->quote_identifier( @parts )
Quote a database identifier (e.g. table names). Multiple @parts will be joined by dots (.).
prepare_regexp
$sql = $db->prepare_regexp( $col, $value )
The syntax used for regular expressions varies across databases. This method takes two quoted string and returns a SQL expression that will apply the quoted regexp $value to the quoted column $col.
sql_as
$sql = $db->sql_AS()
Returns the syntactic glue to use when aliasing. SQL 92 databases will happily use AS but some databases (Oracle) will not accept it.
sql_like
$sql = $db->sql_LIKE()
Returns the syntactic glue to use when making a case-insensitive LIKE. PostgreSQL requires ILIKE while everything else uses LIKE and the column collation.
Counters
counter_current
$n = $db->counter_current( $counter )
Return the value of the previous counter_next on $counter.
counter_next
$n = $db->counter_next( $counter )
Return the next unused value for the named $counter. Returns undef if the $counter doesn't exist.
counter_minimum
$db->counter_minimum( $counter, $value )
Ensure that the $counter is set no lower than $value. This is used when importing eprints which may not be in scrict sequence.
counter_reset
$db->counter_reset( $counter )
Reset the $counter. Use with caution.
next_doc_pos
$n = $db->next_doc_pos( $eprintid )
Return the next unused document position for the given $eprintid.
Dataset Data
exists
$boolean = $db->exists( $dataset, $id )
Return true if there exists an EPrints::DataObj from the $dataset with its primary key set to $id. Otherwise, return false.
add_record
$success = $db->add_record( $dataset, $data )
Add the given $data as a new record in the given $dataset. $data is a reference to a hash containing values structured for a record in the that $dataset.
remove
$success = $db->remove( $dataset, $id )
Attempts to remove the EPrints::DataObj with the primary key $id from the specified $dataset.
Searching, caching and object retrieval
cache_exp
$searchexp = $db->cache_exp( $cacheid )
Return the serialised search of a the cached search with $cacheid. Return undef if the $cacheid is invalid or expired.
cache
$cacheid = $db->cache( $searchexp, $dataset, $srctable, [$order], [$list] )
Create a cache of the specified search expression from the SQL table $srctable.
If $order is set then the cache is ordered by the specified fields. For example -year/title orders by year (descending). Records with the same year are ordered by title.
If $srctable is set to LIST then order is ignored and the list of IDs is taken from the array reference $list.
If $srctable is set to ALL every matching record from $dataset is added to the cache, optionally ordered by $order.
cache_table
$tablename = $db->cache_table( $id )
Return the name of the SQL table used to store the cache with $id.
cache_userid
$userid = $db->cache_userid( $id )
Returns the userid associated with the cache with $id if that cache exists.
get_cachemap
$cachemap = $db->get_cachemap( $id )
Return the cachemap with $<id>.
search
$ids = $db->search( $keyfield, $tables, $conditions, [ $main_table_alias ] )
Return a reference to an array of $keyfield IDs - the results of the search specified by $conditions across the tables specified in the $tables hash where keys are tables aliases and values are table names.
If no $main_table_alias is specified then M is assumed.
drop_cache
$db->drop_cache( $id )
Remove the cached search with the given $id.
from_cache
$items = $db->from_cache( $dataset, $cacheid, [ $offset, $count, $justids ] )
Return a reference to an array containing all the items from the given $dataset that have IDs in the cache specified by $cacheid. The cache may be specified either by ID or serialised search expression.
$offset is an offset from the start of the cache and $count is the number of records to return.
If $justids is true then it returns just a reference to an array of the record IDs and not the objects themselves.
drop_orphan_cache_tables
$c = $db->drop_orphan_cache_tables
Drop tables called cacheXXX where XXX is an integer. Returns the number of cache tables dropped.
get_single
$obj = $db->get_single( $dataset, $id )
Return a single <EPrints::DataObj> from the given $dataset with primary key set to $id.
get_all
$items = $db->get_all( $dataset )
Returns a reference to an array with all the <EPrints::DataObj>s from the given $dataset.
get_cache_ids
@ids = $db->get_cache_ids( $dataset, $cachemap, $offset, $count )
Returns a list of $count IDs from $cache_id starting at $offset and in the order in the $cachemap.
get_dataobjs
@dataobjs = $db->get_dataobjs( $dataset, [ $id, $id, ... ] )
Retrieves the records in $dataset with the given $id(s). If an $id doesn't exist in the database it will be ignored.
get_values
$values = $db->get_values( $field, $dataset )
Return a reference to an array of all the distinct values of the EPrints::MetaField $field for the $dataset specified.
sort_values
$values = $db->sort_values( $field, $values, [ $langid ] )
Sorts and returns the list of $values using the database.
$field is used to get the order value for each value. $langid (or $session->get_langid if unset) is used to determine the database collation to use when sorting the resulting order values.
get_ids_by_field_values
$ids = $db->get_ids_by_field_values( $field, $dataset, [ %opts ] )
Return a reference to a hash table where the keys are specified $datasets's $field value IDs and the values are references to arrays of IDs.
dequeue_events
@events = $db->dequeue_events( $n )
Attempt to dequeue upto $n events. May return between 0 and $n events depending on parallel processes and how many events are remaining in the queue.
ci_lookup
$value = $db->ci_lookup( $field, $value )
This is a hacky method to support case-insensitive lookup for usernames, emails, etc. It returns the actual case-sensitive version of $value if there is a case-insensitive match for the $field.
Password Validation and Secret Fields
valid_login
$db->valid_login( $username, $password )
Returns whether the clear-text $password matches the stored crypted password for the $username.
secret_matches
$db->secret_matches( $dataobj, $fieldname, $token [, $callback ] )
Returns whether the clear-text $token matches the stored crypted field with $fieldname for the $dataobj according to the $callback function.
If not set, $callback defaults to EPrints::Utils#crypt_equals.
is_secret_set
$boolean = $db->is_secret_set( $dataobj, $fieldname )
Returns a boolean for whether the secret $fieldname for $dataobj has a value set.
Database Schema Manipulation
has_sequence
$boolean = $db->has_sequence( $name )
Returns true if a sequence of the given $name exists in the database. Otherwise, returns false.
create_sequence
$success = $db->create_sequence( $name )
Creates a new sequence object with $name and initialises to zero.
drop_sequence
$success = $db->drop_sequence( $name )
Deletes a sequence object with $name.
has_column
$boolean = $db->has_column( $table, $column )
Return true if the named $table has the named $column in the database.
drop_column
$success = $db->drop_column( $table, $column )
Drops the named $column from the named $table.
get_primary_key
@columns = $db->get_primary_key( $tablename )
Returns a list of column names that comprise the primary key for the $tablename.
Returns an empty list if no primary key exists.
index_name
$name = $db->index_name( $table, @cols )
Returns the name of the first index that starts with named columns @cols in the named $table.
Returns undef if no index exists.
get_index_ids
$ids = $db->get_index_ids( $table, $condition )
Return a reference to an array of the distinct primary keys from the named SQL $table which match the specified $condition.
create_index
$success = $db->create_index( $table, @columns )
Creates an index over @columns for named $table. Returns true on success, false otherwise.
create_unique_index
$success = $db->create_unique_index( $tablename, @columns )
Creates a unique index over @columns for named $table. Returns true on success, false otherwise.
create_foreign_key
$ok = $db->create_foreign_key( $main_table, $table, $key_field )
Create a foreign key relationship between named $main_table and named $table using $key_field.
This will cause records in $table to be deleted if the equivalent record is deleted from $main_table.
get_tables
@tables = $db->get_tables( [ $dbname ] )
Returns a list of all the tables in the database.
$dbname specifies a particular database name of current connection has access to more than one database.
has_table
$boolean = $db->has_table( $tablename )
Returns boolean dependent on whether a table of the $tablename exists in the database.
create_table
$success = $db->create_table( $tablename, $setkey, @fields );
Creates a new table with $tablename based on @fields.
The first $setkey number of fields are used for its primary key.
drop_table
$db->drop_table( @tables )
Delete the named @tables. Use with caution!
rename_table
$db->rename_table( $table_from, $table_to )
Renames the table named $table_from to $table_to.
swap_table
$db->swap_table( $table_a, $table_b )
Renames table named $table_a to $table_b and vice-versa.
EPrints Schema Manipulation
create_archive_tables
$success = $db->create_archive_tables()
Create all the SQL tables for all datasets.
drop_archive_tables
$db->drop_archive_tables()
Destroy all tables used by EPrints in the database.
create_version_table
$db->create_version_table
Make the version table (and set the only value to be the current version of EPrints).
drop_version_table
$db->drop_version_table
Drop the version table.
has_dataset
$db->has_dataset( $dataset )
Returns true if $dataset exists in the database and has all expected tables including ordervalues and index tables.
This does not check that all fields are configured - see </has_field>.
has_dataset_index_tables
$db->has_dataset_index_tables( $dataset )
Returns true if index tables for $dataset exists of if this is not indexable.
create_dataset_tables
$success = $db->create_dataset_tables( $dataset )
Creates all the SQL tables for the specified $dataset.
drop_dataset_tables
$db->drop_dataset_tables( $dataset )
Drops all the SQL tables for the specified $dataset.
create_dataset_index_tables
$success = $db->create_dataset_index_tables( $dataset )
Creates all the index tables for the specified $dataset.
create_dataset_ordervalues_tables
$success = $db->create_dataset_ordervalues_tables( $dataset )
Creates all the ordervalues tables for the specified $dataset.
has_field
$db->has_field( $dataset, $field )
Returns true if $field is in the database for $dataset.
add_field
$db->add_field( $dataset, $field, [ $force ] )
Add $field to $dataset's tables.
If $force is true modify/replace an existing column. Use with care!
remove_field
$db->remove_field( $dataset, $field )
Remove $field from $dataset's tables.
rename_field
$ok = $db->rename_field( $dataset, $field, $old_name )
Rename the $field in the $dataset from its $old_name.
Returns true if the $field is successfully renamed.
create_counters
$success = $db->create_counters
Create the counters used to store the highest current ID of eprints, users, etc.
has_counter
$success = $db->has_counter( $counter )
Returns true if $counter exists.
create_counter
$success = $db->create_counter( $name )
Create and initialise to zero a new counter with $name.
remove_counters
$success = $db->remove_counters
Destroy all counters.
drop_counter
$success = $db->drop_counter( $name )
Destroy the counter named $name.
User Messages
save_user_message
$message = $db->save_user_message( $userid, $m_type, $dom_m_data )
Save user message provided in XML DOM object $dom_m_data as a sanitized string in a EPrints::DataObj::Message using $m_type to define the message type and $userid for the ID of the user whose message it is.
get_user_messages
@messages = $db->get_user_messages( $userid, %opts )
Get the messages for a user with ID $userid and clear messages if $opt{clear} is set.
clear_user_messages
$db->clear_user_messages( $userid )
Clear all messages for user with ID $userid.
SEE ALSO
To access database-stored objects use the methods provided by the following modules: EPrints::Repository, EPrints::DataSet.
COPYRIGHT
© Copyright 2000-2024 University of Southampton.
EPrints 3.4 is supplied by EPrints Services.
http://www.eprints.org/eprints-3.4/
LICENSE
This file is part of EPrints 3.4 http://www.eprints.org/.
EPrints 3.4 and this file are released under the terms of the GNU Lesser General Public License version 3 as published by the Free Software Foundation unless otherwise stated.
EPrints 3.4 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with EPrints 3.4. If not, see http://www.gnu.org/licenses/.