Difference between revisions of "API:EPrints/Database"

From EPrints Documentation
Jump to: navigation, search
(Removing all content from page)
Line 1: Line 1:
 +
<!-- Pod2Wiki=_preamble_
 +
This page has been automatically generated from the EPrints 3.2 source. Any wiki changes made between the 'Pod2Wiki=*' and 'Edit below this comment' comments will be lost.
 +
-->
 +
__NOTOC__
 +
{{API}}{{Pod2Wiki}}{{API:Source|file=EPrints/Database.pm|package_name=EPrints::Database}}[[Category:API|Database]]<div><!-- Edit below this comment -->
  
 +
 +
<!-- Pod2Wiki=head_name --></div>
 +
==NAME==
 +
'''EPrints::Database''' - a connection to the SQL database for an eprints session.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=head_description --></div>
 +
==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.
 +
 +
The database object is created automatically when you start a new eprints session. To get a handle on it use:
 +
 +
$db = $session-&gt;get_database
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=head_cross_database_support --></div>
 +
===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.
 +
 +
Variables that are database quoted are prefixed with 'Q_'.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_build_connection_string --></div>
 +
====$dbstr = EPrints::Database::build_connection_string( %params )====
 +
 +
Build the string to use to connect to the database via DBI. %params  must contain dbname, and may also contain dbport, dbhost and dbsock.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create --></div>
 +
====$db = $db-&gt;create( $username, $password )====
 +
 +
Create and connect to a new database using super user account $username and $password.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_new --></div>
 +
====$db = EPrints::Database-&gt;new( $session )====
 +
 +
Create a connection to the database.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_connect --></div>
 +
====$foo = $db-&gt;connect====
 +
 +
Connects to the database.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_disconnect --></div>
 +
====$foo = $db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_error --></div>
 +
====$errstr = $db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_begin --></div>
 +
====$db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_commit --></div>
 +
====$db-&gt;commit====
 +
 +
Commit the previous 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_rollback --></div>
 +
====$db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_archive_tables --></div>
 +
====$success = $db-&gt;create_archive_tables====
 +
 +
Create all the SQL tables for each dataset.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_archive_tables --></div>
 +
====$db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_dataset_tables --></div>
 +
====$success = $db-&gt;create_dataset_tables( $dataset )====
 +
 +
Create all the SQL tables for a single dataset.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_dataset_tables --></div>
 +
====$db-&gt;drop_dataset_tables( $dataset )====
 +
 +
Drop all the SQL tables for a single dataset.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_dataset_index_tables --></div>
 +
====$success = $db-&gt;create_dataset_index_tables( $dataset )====
 +
 +
Create all the index tables for a single dataset.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_dataset_ordervalues_tables --></div>
 +
====$success = $db-&gt;create_dataset_ordervalues_tables( $dataset )====
 +
 +
Create all the ordervalues tables for a single dataset.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_type_info --></div>
 +
====$type_info = $db-&gt;type_info( DATA_TYPE )====
 +
 +
See {{API:PodLink|file=DBI|package_name=DBI|section=type_info|text=DBI/type_info}}.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_column_type --></div>
 +
====$real_type = $db-&gt;get_column_type( NAME, TYPE, NOT_NULL, [ LENGTH/PRECISION ], [ 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 "not null".
 +
 +
LENGTH/PRECISION 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.
 +
 +
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.
 +
 +
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.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_table --></div>
 +
====$success = $db-&gt;create_table( $tablename, $dataset, $setkey, @fields );====
 +
 +
Create the tables used to store metadata for this dataset: the main table and any required for multiple or mulitlang fields.
 +
 +
The first $setkey number of fields are used for a 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_has_sequence --></div>
 +
====$boolean = $db-&gt;has_sequence( $name )====
 +
 +
Return true if a sequence of the given name 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_sequence --></div>
 +
====$success = $db-&gt;create_sequence( $seq_name )====
 +
 +
Creates a new sequence object initialised 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_sequence --></div>
 +
====$success = $db-&gt;drop_sequence( $seq_name )====
 +
 +
Deletes a sequence object.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_column --></div>
 +
====$success = $db-&gt;drop_column( $table, $column )====
 +
 +
Drops a column from a table.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_primary_key --></div>
 +
====@columns = $db-&gt;get_primary_key( $tablename )====
 +
 +
Returns the list of column names that comprise the primary key for $tablename.
 +
 +
Returns 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_index --></div>
 +
====$success = $db-&gt;create_index( $tablename, @columns )====
 +
 +
Creates an index over @columns for $tablename. Returns true on success.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_unique_index --></div>
 +
====$success = $db-&gt;create_unique_index( $tablename, @columns )====
 +
 +
Creates a unique index over @columns for $tablename. Returns true on success.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item__update --></div>
 +
====$success = $db-&gt;_update( $tablename, $keycols, $keyvals, $columns, @values )====
 +
 +
UPDATES $tablename where $keycols equals $keyvals.
 +
 +
This method is internal.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item__update_quoted --></div>
 +
====$success = $db-&gt;_update_quoted( $tablename, $keycols, $keyvals, $columns, @qvalues )====
 +
 +
UPDATES $tablename where $keycols equals $keyvals. Won't quote $keyvals or @qvalues before use - use this method with care!
 +
 +
This method is internal.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_insert --></div>
 +
====$success = $db-&gt;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.
 +
 +
Values 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_insert_quoted --></div>
 +
====$success = $db-&gt;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.
 +
 +
Values 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_delete_from --></div>
 +
====$success = $db-&gt;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().
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_add_record --></div>
 +
====$success = $db-&gt;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.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_prep_int --></div>
 +
====$mungedvalue = EPrints::Database::prep_int( $value )====
 +
 +
Escape a numerical value for SQL. undef becomes NULL. 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_prep_value --></div>
 +
====$mungedvalue = EPrints::Database::prep_value( $value )====
 +
 +
Escape a value for SQL. Modify value such that " becomes \" and \  becomes \\ and ' becomes \'
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_prep_like_value --></div>
 +
====$mungedvalue = EPrints::Database::prep_like_value( $value )====
 +
 +
Escape an value for an SQL like field. In addition to ' " and \ also  escapes % and _
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_quote_value --></div>
 +
====$str = $db-&gt;quote_value( $value )====
 +
 +
Return a quoted value. To quote a 'like' value you should do:
 +
 +
my $str = $database-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_quote_int --></div>
 +
====$str = $db-&gt;quote_int( $value )====
 +
 +
Return a quoted integer value
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_quote_binary --></div>
 +
====$str = $db-&gt;quote_binary( $bytes )====
 +
 +
Some databases (PostgreSQL) require weird transforms of binary data to work correctly.
 +
 +
This method should be called on data containing nul bytes or back-slashes before being passed on {{API:PodLink|file=|package_name=|section=quote_value|text=/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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_quote_identifier --></div>
 +
====$str = $db-&gt;quote_identifier( @parts )====
 +
 +
Quote a database identifier (e.g. table names). Multiple @parts will be joined by dot.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_update --></div>
 +
====$success = $db-&gt;update( $dataset, $data, $changed, $insert )====
 +
 +
Updates a record in the database with the given $data. Obviously the value of the primary key must be set.
 +
 +
This also updates the text indexes and the ordering keys.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_remove --></div>
 +
====$success = $db-&gt;remove( $dataset, $id )====
 +
 +
Attempts to remove the record with the primary key $id from the  specified dataset.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_counters --></div>
 +
====$success = $db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_has_counter --></div>
 +
====$success = $db-&gt;has_counter( $counter )====
 +
 +
Returns true if $counter exists.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_counter --></div>
 +
====$success = $db-&gt;create_counter( $name )====
 +
 +
Create and initialise to zero a new counter called $name.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_remove_counters --></div>
 +
====$success = $db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_counter --></div>
 +
====$success = $db-&gt;drop_counter( $name )====
 +
 +
Destroy the counter named $name.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_next_doc_pos --></div>
 +
====$n = $db-&gt;next_doc_pos( $eprintid )====
 +
 +
Return the next unused document pos for the given eprintid.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_counter_current --></div>
 +
====$n = $db-&gt;counter_current( $counter )====
 +
 +
Return the value of the previous counter_next on $counter.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_counter_next --></div>
 +
====$n = $db-&gt;counter_next( $counter )====
 +
 +
Return the next unused value for the named counter. Returns undef if  the counter 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_counter_minimum --></div>
 +
====$db-&gt;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.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_counter_reset --></div>
 +
====$db-&gt;counter_reset( $counter )====
 +
 +
Reset the counter. 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_cache_exp --></div>
 +
====$searchexp = $db-&gt;cache_exp( $cacheid )====
 +
 +
Return the serialised Search of a the cached search with id $cacheid. Return undef if the id 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_cache --></div>
 +
====$cacheid = $db-&gt;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.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_cache_table --></div>
 +
====$tablename = $db-&gt;cache_table( $id )====
 +
 +
Return the SQL table used to store the cache with id $id.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_index_ids --></div>
 +
====$ids = $db-&gt;get_index_ids( $table, $condition )====
 +
 +
Return a reference to an array of the distinct primary keys from the given SQL table which match the specified condition.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_search --></div>
 +
====$ids = $db-&gt;search( $keyfield, $tables, $conditions, [$main_table_alias] )====
 +
 +
Return a reference to an array of ids - the results of the search specified by $conditions accross the tables specified in the $tables hash where keys are tables aliases and values are table names.
 +
 +
If no table alias is passed then M 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_cache --></div>
 +
====$db-&gt;drop_cache( $id )====
 +
 +
Remove the cached search with the given id.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_count_table --></div>
 +
====$n = $db-&gt;count_table( $tablename )====
 +
 +
Return the number of rows in the specified SQL table.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_from_cache --></div>
 +
====$foo = $db-&gt;from_cache( $dataset, $cacheid, [$offset], [$count], [$justids] )====
 +
 +
Return a reference to an array containing all the items from the given dataset that have id's in the specified cache. 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 an ref to an array of the record ids, not the objects.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_orphan_cache_tables --></div>
 +
====$c = $db-&gt;drop_orphan_cache_tables====
 +
 +
Drop tables called "cacheXXX" where XXX is an integer. Returns the number of 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_single --></div>
 +
====$obj = $db-&gt;get_single( $dataset, $id )====
 +
 +
Return a single item from the given dataset. The one with the specified id.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_all --></div>
 +
====$items = $db-&gt;get_all( $dataset )====
 +
 +
Returns a reference to an array with all the items from the given dataset.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_cache_ids --></div>
 +
====@ids = $db-&gt;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.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_dataobjs --></div>
 +
====@dataobjs = $db-&gt;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.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_values --></div>
 +
====$foo = $db-&gt;get_values( $field, $dataset )====
 +
 +
Return a reference to an array of all the distinct values of the  EPrints::MetaField specified.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_sort_values --></div>
 +
====$values = $db-&gt;sort_values( $field, $values [, $langid ] )====
 +
 +
ALPHA!!! Liable to API change!!!
 +
 +
Sorts and returns the list of $values using the database.
 +
 +
$field is used to get the order value for each value. $langid (or $session-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_ids_by_field_values --></div>
 +
====$ids = $db-&gt;get_ids_by_field_values( $field, $dataset [ %opts ] )====
 +
 +
Return a reference to a hash table where the keys are field value ids and the value is a reference to an array 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_do --></div>
 +
====$success = $db-&gt;do( $sql )====
 +
 +
Execute the given SQL.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_prepare --></div>
 +
====$sth = $db-&gt;prepare( $sql )====
 +
 +
Prepare the given $sql and return a handle on it.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_prepare_select --></div>
 +
====$sth = $db-&gt;prepare_select( $sql [, %options ] )====
 +
 +
Prepare a SELECT statement $sql and return a handle to it. After preparing a statement use execute() to execute it.
 +
 +
The LIMIT SQL keyword is not universally supported, to specify a LIMIT you must use the '''limit''' 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_execute --></div>
 +
====$success = $db-&gt;execute( $sth, $sql )====
 +
 +
Execute the SQL prepared earlier. $sql is only passed in 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_has_dataset --></div>
 +
====$db-&gt;has_dataset( $dataset )====
 +
 +
Returns true if $dataset exists in the database or has no database 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_has_field --></div>
 +
====$db-&gt;has_field( $dataset, $field )====
 +
 +
Returns true if $field is in the database for $dataset.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_add_field --></div>
 +
====$db-&gt;add_field( $dataset, $field [, $force ] )====
 +
 +
Add $field to $dataset's tables.
 +
 +
If $force is true will 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_remove_field --></div>
 +
====$db-&gt;remove_field( $dataset, $field )====
 +
 +
Remove $field from $dataset'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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_rename_field --></div>
 +
====$ok = $db-&gt;rename_field( $dataset, $field, $old_name )====
 +
 +
Rename a $field in the database from it's old name $old_name.
 +
 +
Returns true if the field was 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_exists --></div>
 +
====$boolean = $db-&gt;exists( $dataset, $id )====
 +
 +
Return true if a record with the given primary key exists in the dataset, otherwise false.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_set_debug --></div>
 +
====$db-&gt;set_debug( $boolean )====
 +
 +
Set the SQL debug mode to true or false.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_create_version_table --></div>
 +
====$db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_version_table --></div>
 +
====$db-&gt;drop_version_table====
 +
 +
Drop the version table.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_set_version --></div>
 +
====$db-&gt;set_version( $versionid );====
 +
 +
Set the version id table in the SQL database to the given value (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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_has_table --></div>
 +
====$boolean = $db-&gt;has_table( $tablename )====
 +
 +
Return true if a table of the given name 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_has_column --></div>
 +
====$boolean = $db-&gt;has_column( $tablename, $columnname )====
 +
 +
Return true if the a table of the given name has a column named $columnname 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_drop_table --></div>
 +
====$db-&gt;drop_table( $tablename )====
 +
 +
Delete the named table. 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_clear_table --></div>
 +
====$db-&gt;clear_table( $tablename )====
 +
 +
Clears all records from the given table, 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_rename_table --></div>
 +
====$db-&gt;rename_table( $tablename, $newtablename )====
 +
 +
Renames the table from the old name to the new one.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_swap_table --></div>
 +
====$db-&gt;swap_table( $table_a, $table_b )====
 +
 +
Swap table a and table b.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_tables --></div>
 +
====@tables = $db-&gt;get_tables====
 +
 +
Return a list of all the tables 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_version --></div>
 +
====$version = $db-&gt;get_version====
 +
 +
Return the version of eprints which the database is compatable with or undef if unknown (before v2.1).
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_is_latest_version --></div>
 +
====$boolean = $db-&gt;is_latest_version====
 +
 +
Return true if the SQL tables are in the correct configuration for this edition of eprints. Otherwise false.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_valid_login --></div>
 +
====$db-&gt;valid_login( $username, $password )====
 +
 +
Returns whether the clear-text $password matches the stored crypted password for $username.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_server_version --></div>
 +
====$version = $db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_default_charset --></div>
 +
====$charset = $db-&gt;get_default_charset( LANGUAGE )====
 +
 +
Return the character set to use for LANGUAGE.
 +
 +
Returns undef 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_default_collation --></div>
 +
====$collation = $db-&gt;get_default_collation( LANGUAGE )====
 +
 +
Return the collation to use for LANGUAGE.
 +
 +
Returns undef 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_get_driver_name --></div>
 +
====$driver = $db-&gt;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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=for --></div>
 +
INTERNAL<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_dequeue_events --></div>
 +
====@events = $db-&gt;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 on 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%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=item_prepare_regexp --></div>
 +
====$sql = $db-&gt;prepare_regexp( $quoted_column, $quoted_value )====
 +
 +
The syntax used for regular expressions varies across databases. This method takes two '''quoted''' values and returns a SQL expression that will apply the regexp ($quoted_value) to the column ($quoted_column).
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<h4><span style='display:none'>User Comments</span></h4>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki=_postamble_ --><!-- Edit below this comment -->

Revision as of 16:33, 12 February 2010


EPrints 3 Reference: Directory Structure - Metadata Fields - Repository Configuration - XML Config Files - XML Export Format - EPrints data structure - Core API - Data Objects


API: Core API

Latest Source Code (3.4, 3.3) | Revision Log | Before editing this page please read Pod2Wiki


NAME

EPrints::Database - a connection to the SQL database for an eprints session.

User Comments


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.

The database object is created automatically when you start a new eprints session. To get a handle on it use:

$db = $session->get_database

User Comments


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.

Variables that are database quoted are prefixed with 'Q_'.

User Comments


$dbstr = EPrints::Database::build_connection_string( %params )

Build the string to use to connect to the database via DBI. %params must contain dbname, and may also contain dbport, dbhost and dbsock.

User Comments


$db = $db->create( $username, $password )

Create and connect to a new database using super user account $username and $password.

User Comments


$db = EPrints::Database->new( $session )

Create a connection to the database.

User Comments


$foo = $db->connect

Connects to the database.

User Comments


$foo = $db->disconnect

Disconnects from the EPrints database. Should always be done before any script exits.

User Comments


$errstr = $db->error

Return a string describing the last SQL error.

User Comments


$db->begin

Begin a transaction.

User Comments


$db->commit

Commit the previous begun transaction.

User Comments


$db->rollback

Rollback the partially completed transaction.

User Comments


$success = $db->create_archive_tables

Create all the SQL tables for each dataset.

User Comments


$db->drop_archive_tables()

Destroy all tables used by eprints in the database.

User Comments


$success = $db->create_dataset_tables( $dataset )

Create all the SQL tables for a single dataset.

User Comments


$db->drop_dataset_tables( $dataset )

Drop all the SQL tables for a single dataset.

User Comments


$success = $db->create_dataset_index_tables( $dataset )

Create all the index tables for a single dataset.

User Comments


$success = $db->create_dataset_ordervalues_tables( $dataset )

Create all the ordervalues tables for a single dataset.

User Comments


$type_info = $db->type_info( DATA_TYPE )

See DBI/type_info.

User Comments


$real_type = $db->get_column_type( NAME, TYPE, NOT_NULL, [ LENGTH/PRECISION ], [ 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 "not null".

LENGTH/PRECISION 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.

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.

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.

User Comments


$success = $db->create_table( $tablename, $dataset, $setkey, @fields );

Create the tables used to store metadata for this dataset: the main table and any required for multiple or mulitlang fields.

The first $setkey number of fields are used for a primary key.

User Comments


$boolean = $db->has_sequence( $name )

Return true if a sequence of the given name exists in the database.

User Comments


$success = $db->create_sequence( $seq_name )

Creates a new sequence object initialised to zero.

User Comments


$success = $db->drop_sequence( $seq_name )

Deletes a sequence object.

User Comments


$success = $db->drop_column( $table, $column )

Drops a column from a table.

User Comments


@columns = $db->get_primary_key( $tablename )

Returns the list of column names that comprise the primary key for $tablename.

Returns empty list if no primary key exists.

User Comments


$success = $db->create_index( $tablename, @columns )

Creates an index over @columns for $tablename. Returns true on success.

User Comments


$success = $db->create_unique_index( $tablename, @columns )

Creates a unique index over @columns for $tablename. Returns true on success.

User Comments


$success = $db->_update( $tablename, $keycols, $keyvals, $columns, @values )

UPDATES $tablename where $keycols equals $keyvals.

This method is internal.

User Comments


$success = $db->_update_quoted( $tablename, $keycols, $keyvals, $columns, @qvalues )

UPDATES $tablename where $keycols equals $keyvals. Won't quote $keyvals or @qvalues before use - use this method with care!

This method is internal.

User Comments


$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.

Values will be quoted before insertion.

User Comments


$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.

Values will NOT be quoted before insertion - care must be exercised!

User Comments


$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().

User Comments


$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.

User Comments


$mungedvalue = EPrints::Database::prep_int( $value )

Escape a numerical value for SQL. undef becomes NULL. Anything else becomes a number (zero if needed).

User Comments


$mungedvalue = EPrints::Database::prep_value( $value )

Escape a value for SQL. Modify value such that " becomes \" and \ becomes \\ and ' becomes \'

User Comments


$mungedvalue = EPrints::Database::prep_like_value( $value )

Escape an value for an SQL like field. In addition to ' " and \ also escapes % and _

User Comments


$str = $db->quote_value( $value )

Return a quoted value. To quote a 'like' value you should do:

my $str = $database->quote_value( EPrints::Database::prep_like_value( $foo ) . '%' );
 

User Comments


$str = $db->quote_int( $value )

Return a quoted integer value

User Comments


$str = $db->quote_binary( $bytes )

Some databases (PostgreSQL) require weird transforms of binary data to work correctly.

This method should be called on data containing nul bytes or back-slashes before being passed on /quote_value.

User Comments


$str = $db->quote_identifier( @parts )

Quote a database identifier (e.g. table names). Multiple @parts will be joined by dot.

User Comments


$success = $db->update( $dataset, $data, $changed, $insert )

Updates a record in the database with the given $data. Obviously the value of the primary key must be set.

This also updates the text indexes and the ordering keys.

User Comments


$success = $db->remove( $dataset, $id )

Attempts to remove the record with the primary key $id from the specified dataset.

User Comments


$success = $db->create_counters

Create the counters used to store the highest current id of eprints, users etc.

User Comments


$success = $db->has_counter( $counter )

Returns true if $counter exists.

User Comments


$success = $db->create_counter( $name )

Create and initialise to zero a new counter called $name.

User Comments


$success = $db->remove_counters

Destroy all counters.

User Comments


$success = $db->drop_counter( $name )

Destroy the counter named $name.

User Comments


$n = $db->next_doc_pos( $eprintid )

Return the next unused document pos for the given eprintid.

User Comments


$n = $db->counter_current( $counter )

Return the value of the previous counter_next on $counter.

User Comments


$n = $db->counter_next( $counter )

Return the next unused value for the named counter. Returns undef if the counter doesn't exist.

User Comments


$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.

User Comments


$db->counter_reset( $counter )

Reset the counter. Use with caution.

User Comments


$searchexp = $db->cache_exp( $cacheid )

Return the serialised Search of a the cached search with id $cacheid. Return undef if the id is invalid or expired.

User Comments


$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.

User Comments


$tablename = $db->cache_table( $id )

Return the SQL table used to store the cache with id $id.

User Comments


$ids = $db->get_index_ids( $table, $condition )

Return a reference to an array of the distinct primary keys from the given SQL table which match the specified condition.

User Comments


$ids = $db->search( $keyfield, $tables, $conditions, [$main_table_alias] )

Return a reference to an array of ids - the results of the search specified by $conditions accross the tables specified in the $tables hash where keys are tables aliases and values are table names.

If no table alias is passed then M is assumed.

User Comments


$db->drop_cache( $id )

Remove the cached search with the given id.

User Comments


$n = $db->count_table( $tablename )

Return the number of rows in the specified SQL table.

User Comments


$foo = $db->from_cache( $dataset, $cacheid, [$offset], [$count], [$justids] )

Return a reference to an array containing all the items from the given dataset that have id's in the specified cache. 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 an ref to an array of the record ids, not the objects.

User Comments


$c = $db->drop_orphan_cache_tables

Drop tables called "cacheXXX" where XXX is an integer. Returns the number of tables dropped.

User Comments


$obj = $db->get_single( $dataset, $id )

Return a single item from the given dataset. The one with the specified id.

User Comments


$items = $db->get_all( $dataset )

Returns a reference to an array with all the items from the given dataset.

User Comments


@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.

User Comments


@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.

User Comments


$foo = $db->get_values( $field, $dataset )

Return a reference to an array of all the distinct values of the EPrints::MetaField specified.

User Comments


$values = $db->sort_values( $field, $values [, $langid ] )

ALPHA!!! Liable to API change!!!

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.

User Comments


$ids = $db->get_ids_by_field_values( $field, $dataset [ %opts ] )

Return a reference to a hash table where the keys are field value ids and the value is a reference to an array of ids.

User Comments


$success = $db->do( $sql )

Execute the given SQL.

User Comments


$sth = $db->prepare( $sql )

Prepare the given $sql and return a handle on it.

User Comments


$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.

The LIMIT SQL keyword is not universally supported, to specify a LIMIT you must use the limit option.

Options:

 limit - limit the number of rows returned
 offset - return limit number of rows after offset
 

User Comments


$success = $db->execute( $sth, $sql )

Execute the SQL prepared earlier. $sql is only passed in for debugging purposes.

User Comments


$db->has_dataset( $dataset )

Returns true if $dataset exists in the database or has no database tables.

This does not check that all fields are configured - see has_field().

User Comments


$db->has_field( $dataset, $field )

Returns true if $field is in the database for $dataset.

User Comments


$db->add_field( $dataset, $field [, $force ] )

Add $field to $dataset's tables.

If $force is true will modify/replace an existing column (use with care!).

User Comments


$db->remove_field( $dataset, $field )

Remove $field from $dataset's tables.

User Comments


$ok = $db->rename_field( $dataset, $field, $old_name )

Rename a $field in the database from it's old name $old_name.

Returns true if the field was successfully renamed.

User Comments


$boolean = $db->exists( $dataset, $id )

Return true if a record with the given primary key exists in the dataset, otherwise false.

User Comments


$db->set_debug( $boolean )

Set the SQL debug mode to true or false.

User Comments


$db->create_version_table

Make the version table (and set the only value to be the current version of eprints).

User Comments


$db->drop_version_table

Drop the version table.

User Comments


$db->set_version( $versionid );

Set the version id table in the SQL database to the given value (used by the upgrade script).

User Comments


$boolean = $db->has_table( $tablename )

Return true if a table of the given name exists in the database.

User Comments


$boolean = $db->has_column( $tablename, $columnname )

Return true if the a table of the given name has a column named $columnname in the database.

User Comments


$db->drop_table( $tablename )

Delete the named table. Use with caution!

User Comments


$db->clear_table( $tablename )

Clears all records from the given table, use with caution!

User Comments


$db->rename_table( $tablename, $newtablename )

Renames the table from the old name to the new one.

User Comments


$db->swap_table( $table_a, $table_b )

Swap table a and table b.

User Comments


@tables = $db->get_tables

Return a list of all the tables in the database.

User Comments


$version = $db->get_version

Return the version of eprints which the database is compatable with or undef if unknown (before v2.1).

User Comments


$boolean = $db->is_latest_version

Return true if the SQL tables are in the correct configuration for this edition of eprints. Otherwise false.

User Comments


$db->valid_login( $username, $password )

Returns whether the clear-text $password matches the stored crypted password for $username.

User Comments


$version = $db->get_server_version

Return the database server version.

User Comments


$charset = $db->get_default_charset( LANGUAGE )

Return the character set to use for LANGUAGE.

Returns undef if character sets are unsupported.

User Comments


$collation = $db->get_default_collation( LANGUAGE )

Return the collation to use for LANGUAGE.

Returns undef if collation is unsupported.

User Comments


$driver = $db->get_driver_name

Return the database driver name.

User Comments


INTERNAL

User Comments


@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 on the queue.

User Comments


$sql = $db->prepare_regexp( $quoted_column, $quoted_value )

The syntax used for regular expressions varies across databases. This method takes two quoted values and returns a SQL expression that will apply the regexp ($quoted_value) to the column ($quoted_column).

User Comments