Difference between revisions of "API:EPrints/Database"
(33 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=EPrints/Database.pm|package_name=EPrints::Database}}[[Category:API| | + | -->{{API}}{{Pod2Wiki}}{{API:Source|file=EPrints/Database.pm|package_name=EPrints::Database}}[[Category:API|DATABASE]]<div><!-- Edit below this comment --> |
Line 21: | Line 21: | ||
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. | 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. | |
− | |||
− | |||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 34: | Line 32: | ||
<!-- Pod2Wiki=head_cross_database_support --> | <!-- Pod2Wiki=head_cross_database_support --> | ||
===Cross-database Support=== | ===Cross-database Support=== | ||
− | Any use of SQL must use quote_identifier to quote database tables and columns. The only exception to this are the Database::* modules which provide database-driver specific extensions. | + | 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 --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=head_quoting_sql_values --> | ||
+ | ===Quoting SQL Values=== | ||
+ | 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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 45: | Line 101: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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 --> | ||
+ | |||
+ | |||
+ | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 57: | Line 137: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=head_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 --> | ||
− | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=head_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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 70: | Line 156: | ||
</div> | </div> | ||
<!-- Pod2Wiki=item_new --> | <!-- Pod2Wiki=item_new --> | ||
− | ==== | + | ====new==== |
+ | $db = EPrints::Database->new( $repo, [ %opts ] ) | ||
Create a connection to the database. | 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 --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 82: | Line 205: | ||
</div> | </div> | ||
<!-- Pod2Wiki=item_connect --> | <!-- Pod2Wiki=item_connect --> | ||
− | ==== | + | ====connect==== |
+ | $db->connect() | ||
Connects to the database. | Connects to the database. | ||
Line 94: | Line 218: | ||
</div> | </div> | ||
<!-- Pod2Wiki=item_disconnect --> | <!-- Pod2Wiki=item_disconnect --> | ||
− | ==== | + | ====disconnect==== |
− | Disconnects from the EPrints database. Should always be done before any script exits. | + | $db->disconnect() |
+ | Disconnects from the EPrints database. Should always be done before any script exits. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 105: | Line 230: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_set_debug --> |
− | ====$ | + | ====set_debug==== |
+ | |||
+ | $db->set_debug( $boolean ) | ||
+ | Set the SQL debug mode to <tt>true</tt> or <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 --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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). | ||
+ | |||
+ | <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_version --> | ||
+ | ====get_version==== | ||
+ | |||
+ | $version = $db->get_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 --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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 --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_get_server_version --> | ||
+ | ====get_server_version==== | ||
− | Return | + | $version = $db->get_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 117: | Line 295: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_get_default_charset --> |
− | ====$db-> | + | ====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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 129: | Line 310: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_get_default_collation --> |
− | ====$db-> | + | ====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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 141: | Line 325: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_get_driver_name --> |
− | ==== | + | ====get_driver_name==== |
− | + | $driver = $db->get_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 153: | Line 338: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_error --> |
− | ==== | + | ====error==== |
− | + | $errstr = $db->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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 165: | Line 351: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_retry_error --> |
− | ==== | + | ====retry_error==== |
− | + | $boolean = $db->retry_error() | |
+ | Returns a boolean for whether the database error is a retry error. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 177: | Line 364: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_duplicate_error --> |
− | ==== | + | ====duplicate_error==== |
− | + | $boolean = $db->duplicate_error() | |
+ | Returns a boolean for whether the database error is a duplicate error. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 189: | Line 377: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_begin --> |
− | ==== | + | ====begin==== |
− | + | $db->begin() | |
+ | 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 201: | Line 390: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_commit --> |
− | ==== | + | ====commit==== |
− | + | $db->commit() | |
+ | 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 213: | Line 403: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 226: | Line 417: | ||
</div> | </div> | ||
<!-- Pod2Wiki=item_type_info --> | <!-- Pod2Wiki=item_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}}. | ||
Line 238: | Line 430: | ||
</div> | </div> | ||
<!-- Pod2Wiki=item_get_column_type --> | <!-- Pod2Wiki=item_get_column_type --> | ||
− | ==== | + | ====get_column_type==== |
− | Returns a SQL column definition for | + | $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: | ||
$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 253: | Line 446: | ||
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. | + | 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. | ||
Line 280: | Line 473: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=head_basic_sql_operations --> |
− | ==== | + | ===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 --> | ||
− | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 294: | Line 495: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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: | |
+ | my $sth = $db->prepare_select( "SELECT 'Hello, World'" ); | ||
+ | $sth->execute; | ||
+ | |||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 306: | Line 513: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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: | |
+ | limit - limit the number of rows returned | ||
+ | offset - return '''limit''' number of rows after offset | ||
+ | |||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 318: | Line 535: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 330: | Line 548: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_update --> |
− | ====$success = $db-> | + | ====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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 342: | Line 563: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 356: | Line 580: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 368: | Line 593: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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! | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 380: | Line 606: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_delete_from --> |
− | ====$success = $db-> | + | ====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>. | ||
+ | |||
+ | <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_count_table --> | ||
+ | ====count_table==== | ||
− | + | $n = $db->count_table( $tablename ) | |
+ | Return the number of rows in the specified SQL table with <tt>$tablename</tt>. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 394: | Line 634: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_clear_table --> |
− | ==== | + | ====clear_table==== |
− | + | $db->clear_table( $tablename ) | |
+ | Clears all records from the given table with <tt>$tablename</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 --> | ||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=head_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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 408: | Line 656: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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 --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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 --> | ||
+ | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 422: | Line 695: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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 --> | ||
− | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=item_quote_int --> | ||
+ | ====quote_int==== | ||
+ | |||
+ | $str = $db->quote_int( $value ) | ||
+ | Return a quoted integer for <tt>$value</tt>. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 436: | Line 723: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_quote_binary --> |
− | ====$ | + | ====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 <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 --> | ||
+ | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 450: | Line 751: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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>). | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 462: | Line 764: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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>. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 474: | Line 777: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 486: | Line 790: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
+ | |||
+ | <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_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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 498: | Line 812: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_counter_current --> |
− | ==== | + | ====counter_current==== |
− | Return | + | $n = $db->counter_current( $counter ) |
+ | Return the value of the previous counter_next on <tt>$counter</tt>. | ||
− | |||
− | |||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 512: | Line 825: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_counter_next --> |
− | ==== | + | ====counter_next==== |
− | Return | + | $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. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 524: | Line 838: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
+ | |||
+ | <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_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 538: | Line 864: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_next_doc_pos --> |
− | ==== | + | ====next_doc_pos==== |
− | + | $n = $db->next_doc_pos( $eprintid ) | |
+ | Return the next unused document position for the given <tt>$eprintid</tt>. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 550: | Line 877: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=head_dataset_data --> |
− | ==== | + | ===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 --> | ||
+ | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 564: | Line 899: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 576: | Line 912: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_remove --> |
− | ====$success = $db-> | + | ====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 --> | ||
− | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=head_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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 588: | Line 934: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 600: | Line 947: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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>. | ||
+ | |||
+ | 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 <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 <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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 612: | Line 966: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 624: | Line 979: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 636: | Line 992: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_get_cachemap --> |
− | ==== | + | ====get_cachemap==== |
− | Return the | + | $cachemap = $db->get_cachemap( $id ) |
+ | 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 648: | Line 1,005: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
− | + | 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 660: | Line 1,020: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_drop_cache --> |
− | ==== | + | ====drop_cache==== |
− | + | $db->drop_cache( $id ) | |
+ | Remove the cached search with the given <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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 672: | Line 1,033: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_from_cache --> |
− | ====$db-> | + | ====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. | ||
+ | |||
+ | <tt>$offset</tt> is an offset from the start of the cache and <tt>$count</tt> is the number of records to return. | ||
− | + | 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 684: | Line 1,050: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 696: | Line 1,063: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_get_single --> |
− | ==== | + | ====get_single==== |
− | Return | + | $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>. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 708: | Line 1,076: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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>. | ||
− | + | <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_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>. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 726: | Line 1,102: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 738: | Line 1,115: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_get_values --> |
− | ==== | + | ====get_values==== |
− | Return a reference to an array of the distinct | + | $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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 750: | Line 1,128: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 764: | Line 1,143: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 776: | Line 1,156: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 788: | Line 1,169: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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 --> | ||
− | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- 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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 804: | Line 1,191: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 816: | Line 1,204: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 828: | Line 1,219: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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 --> | ||
+ | ===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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 840: | Line 1,241: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_has_sequence --> |
− | ==== | + | ====has_sequence==== |
− | Returns a | + | $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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 852: | Line 1,254: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_create_sequence --> |
− | ==== | + | ====create_sequence==== |
− | + | $success = $db->create_sequence( $name ) | |
+ | Creates a new sequence object with <tt>$name</tt> and initialises to zero. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 864: | Line 1,267: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_drop_sequence --> |
− | ==== | + | ====drop_sequence==== |
− | + | $success = $db->drop_sequence( $name ) | |
+ | Deletes a sequence object with <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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 876: | Line 1,280: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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 --> | ||
− | |||
− | + | <!-- Pod2Wiki= --> | |
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 892: | Line 1,306: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 904: | Line 1,321: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 916: | Line 1,336: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 928: | Line 1,349: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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. | ||
− | + | <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_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. | ||
+ | |||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 947: | Line 1,375: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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>. | ||
− | + | 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 959: | Line 1,390: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_get_tables --> |
− | ==== | + | ====get_tables==== |
− | Returns | + | @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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 973: | Line 1,405: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_has_table --> |
− | ==== | + | ====has_table==== |
− | Returns | + | $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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 985: | Line 1,418: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_create_table --> |
− | ====$db-> | + | ====create_table==== |
+ | |||
+ | $success = $db->create_table( $tablename, $setkey, @fields ); | ||
+ | Creates a new table with <tt>$tablename</tt> based on <tt>@fields</tt>. | ||
+ | |||
+ | 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 --> | ||
− | + | ||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 999: | Line 1,446: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,011: | Line 1,459: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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 --> | ||
− | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=head_eprints_schema_manipulation --> | ||
+ | ===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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 1,025: | Line 1,481: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_create_archive_tables --> |
− | ==== | + | ====create_archive_tables==== |
− | + | $success = $db->create_archive_tables() | |
+ | Create all the SQL tables for all datasets. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,037: | Line 1,494: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_drop_archive_tables --> |
− | ==== | + | ====drop_archive_tables==== |
− | + | $db->drop_archive_tables() | |
+ | Destroy all tables used by EPrints 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,050: | Line 1,508: | ||
</div> | </div> | ||
<!-- Pod2Wiki=item_create_version_table --> | <!-- Pod2Wiki=item_create_version_table --> | ||
− | ==== | + | ====create_version_table==== |
− | Make the version table (and set the only value to be the current version of | + | $db->create_version_table |
+ | Make the version table (and set the only value to be the current version of EPrints). | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,062: | Line 1,521: | ||
</div> | </div> | ||
<!-- Pod2Wiki=item_drop_version_table --> | <!-- Pod2Wiki=item_drop_version_table --> | ||
− | ==== | + | ====drop_version_table==== |
+ | $db->drop_version_table | ||
Drop the version table. | Drop the version table. | ||
Line 1,073: | Line 1,533: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_has_dataset --> |
− | ====$db-> | + | ====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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,085: | Line 1,548: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,097: | Line 1,561: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,109: | Line 1,574: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,123: | Line 1,587: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,135: | Line 1,600: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,147: | Line 1,613: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,159: | Line 1,626: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_add_field --> |
− | ====$db-> | + | ====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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,171: | Line 1,641: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,183: | Line 1,654: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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 <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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,195: | Line 1,669: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_create_counters --> |
− | ==== | + | ====create_counters==== |
− | + | $success = $db->create_counters | |
+ | Create the counters used to store the highest current ID of eprints, users, etc. | ||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,207: | Line 1,682: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,219: | Line 1,695: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_create_counter --> |
− | ==== | + | ====create_counter==== |
− | + | $success = $db->create_counter( $name ) | |
+ | Create and initialise to zero a new counter with <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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,231: | Line 1,708: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_remove_counters --> |
− | ==== | + | ====remove_counters==== |
− | + | $success = $db->remove_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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,245: | Line 1,721: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- Pod2Wiki=item_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%; '> | <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> | <span style='display:none'>User Comments</span> | ||
Line 1,259: | Line 1,743: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,271: | Line 1,756: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,283: | Line 1,769: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
Line 1,295: | Line 1,782: | ||
<!-- Pod2Wiki= --> | <!-- Pod2Wiki= --> | ||
</div> | </div> | ||
− | <!-- Pod2Wiki= | + | <!-- 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 --> | ||
+ | |||
+ | <!-- 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%; '> | <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> | <span style='display:none'>User Comments</span> |
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/.