Difference between revisions of "API:EPrints/Database"

From EPrints Documentation
Jump to: navigation, search
 
(34 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.2 source. Any wiki changes made between the 'Pod2Wiki=*' and 'Edit below this comment' comments will be lost.
+
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|DATABASE]]<div><!-- Edit below this comment -->
__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>
+
<!-- Pod2Wiki=_private_ --><!-- Pod2Wiki=head_name -->
 
==NAME==
 
==NAME==
 
'''EPrints::Database''' - a connection to the SQL database for an eprints session.
 
'''EPrints::Database''' - a connection to the SQL database for an eprints session.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=head_description --></div>
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=head_description -->
 
==DESCRIPTION==
 
==DESCRIPTION==
 
EPrints Database Access Module
 
EPrints Database Access Module
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.
  
The database object is created automatically when you start a new eprints session. To get a handle on it use:
+
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.
  
$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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=head_cross_database_support -->
 +
===Cross-database Support===
 +
Any use of SQL statements must use [[API:EPrints/Database#quote_identifier|quote_identifier]] to quote  database tables and columns and 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-&gt;quote_value( "Hello, World!" );
 +
$db-&gt;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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=head_cross_database_support --></div>
+
<!-- Pod2Wiki= -->
===Cross-database Support===
+
</div>
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.
+
<!-- Pod2Wiki=head_instance_variables -->
 +
==INSTANCE VARIABLES==
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_$self->{session} -->
 +
===$self-&gt;{session}===
  
Variables that are database quoted are prefixed with 'Q_'.
+
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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_build_connection_string --></div>
+
<!-- Pod2Wiki= -->
====$dbstr = EPrints::Database::build_connection_string( %params )====
+
</div>
 +
<!-- Pod2Wiki=item_$self->{debug} -->
 +
===$self-&gt;{debug}===
  
Build the string to use to connect to the database via DBI. %params  must contain dbname, and may also contain dbport, dbhost and dbsock.
+
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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create --></div>
+
<!-- Pod2Wiki= -->
====$db = $db-&gt;create( $username, $password )====
+
</div>
 +
<!-- Pod2Wiki=item_$self->{dbh} -->
 +
===$self-&gt;{dbh}===
  
Create and connect to a new database using super user account $username and $password.
+
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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_new --></div>
+
<!-- Pod2Wiki= -->
====$db = EPrints::Database-&gt;new( $session )====
+
</div>
 +
<!-- 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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_new -->
 +
====new====
 +
 +
$db = EPrints::Database-&gt;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-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_connect --></div>
+
<!-- Pod2Wiki= -->
====$foo = $db-&gt;connect====
+
</div>
 +
<!-- Pod2Wiki=item_connect -->
 +
====connect====
  
 +
$db-&gt;connect()
 
Connects to the database.  
 
Connects to the database.  
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_disconnect -->
 +
====disconnect====
 +
 
 +
$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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_set_debug -->
 +
====set_debug====
 +
 
 +
$db-&gt;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-&gt;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-&gt;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 -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_disconnect --></div>
+
<!-- Pod2Wiki= -->
====$foo = $db-&gt;disconnect====
+
</div>
 +
<!-- Pod2Wiki=item_is_latest_version -->
 +
====is_latest_version====
  
Disconnects from the EPrints database. Should always be done before any script exits.
+
$boolean = $db-&gt;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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_error --></div>
+
<!-- Pod2Wiki= -->
====$errstr = $db-&gt;error====
+
</div>
 +
<!-- Pod2Wiki=item_get_server_version -->
 +
====get_server_version====
  
Return a string describing the last SQL error.
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_begin --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;begin====
+
</div>
 +
<!-- Pod2Wiki=item_get_default_charset -->
 +
====get_default_charset====
 +
 
 +
$charset = $db-&gt;get_default_charset
 +
Return the character set to use.
  
Begin a transaction.
+
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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_commit --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;commit====
+
</div>
 +
<!-- Pod2Wiki=item_get_default_collation -->
 +
====get_default_collation====
  
Commit the previous begun transaction.
+
$collation = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_rollback --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;rollback====
+
</div>
 +
<!-- Pod2Wiki=item_get_driver_name -->
 +
====get_driver_name====
  
Rollback the partially completed transaction.
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_archive_tables --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_archive_tables====
+
</div>
 +
<!-- Pod2Wiki=item_error -->
 +
====error====
  
Create all the SQL tables for each dataset.
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_archive_tables --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;drop_archive_tables()====
+
</div>
 +
<!-- Pod2Wiki=item_retry_error -->
 +
====retry_error====
  
Destroy all tables used by eprints in the database.
+
$boolean = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_dataset_tables --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_dataset_tables( $dataset )====
+
</div>
 +
<!-- Pod2Wiki=item_duplicate_error -->
 +
====duplicate_error====
  
Create all the SQL tables for a single dataset.
+
$boolean = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_dataset_tables --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;drop_dataset_tables( $dataset )====
+
</div>
 +
<!-- Pod2Wiki=item_begin -->
 +
====begin====
  
Drop all the SQL tables for a single dataset.
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_dataset_index_tables --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_dataset_index_tables( $dataset )====
+
</div>
 +
<!-- Pod2Wiki=item_commit -->
 +
====commit====
  
Create all the index tables for a single dataset.
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_dataset_ordervalues_tables --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_dataset_ordervalues_tables( $dataset )====
+
</div>
 +
<!-- Pod2Wiki=item_rollback -->
 +
====rollback====
  
Create all the ordervalues tables for a single dataset.
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_type_info --></div>
+
<!-- Pod2Wiki= -->
====$type_info = $db-&gt;type_info( DATA_TYPE )====
+
</div>
 +
<!-- Pod2Wiki=item_type_info -->
 +
====type_info====
  
 +
$type_info = $db-&gt;type_info( $data_type )
 
See {{API:PodLink|file=DBI|package_name=DBI|section=type_info|text=DBI/type_info}}.
 
See {{API:PodLink|file=DBI|package_name=DBI|section=type_info|text=DBI/type_info}}.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_column_type --></div>
+
<!-- Pod2Wiki= -->
====$real_type = $db-&gt;get_column_type( NAME, TYPE, NOT_NULL, [ LENGTH/PRECISION ], [ SCALE ], %opts )====
+
</div>
 +
<!-- Pod2Wiki=item_get_column_type -->
 +
====get_column_type====
  
Returns a SQL column definition for NAME of type TYPE, usually something like:
+
$real_type = $db-&gt;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 NOT_NULL is true column will be set "not null".
+
If <tt>$not_null</tt> is <tt>true</tt> column will be set to <tt>NOT NULL</tt>.
  
LENGTH/PRECISION and SCALE control the maximum lengths of character or decimal types (see below).
+
<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 217: 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 '''sorted''' is true, the database may use a substitute column type.
+
'''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.
  
TYPE is the SQL type. The types are constants defined by this module, to import them use:
+
<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 LENGTH argument):
+
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.
  
 
<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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_table --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_table( $tablename, $dataset, $setkey, @fields );====
+
</div>
 +
<!-- 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 -->
  
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.
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_do -->
 +
====do====
 +
 
 +
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_has_sequence --></div>
+
<!-- Pod2Wiki= -->
====$boolean = $db-&gt;has_sequence( $name )====
+
</div>
 +
<!-- Pod2Wiki=item_prepare -->
 +
====prepare====
  
Return true if a sequence of the given name exists in the database.
+
$sth = $db-&gt;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-&gt;prepare_select( "SELECT 'Hello, World'" );
 +
  $sth-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_sequence --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_sequence( $seq_name )====
+
</div>
 +
<!-- Pod2Wiki=item_prepare_select -->
 +
====prepare_select====
 +
 
 +
$sth = $db-&gt;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.
  
Creates a new sequence object initialised to zero.
+
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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_sequence --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;drop_sequence( $seq_name )====
+
</div>
 +
<!-- Pod2Wiki=item_execute -->
 +
====execute====
  
Deletes a sequence object.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_column --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;drop_column( $table, $column )====
+
</div>
 +
<!-- Pod2Wiki=item_update -->
 +
====update====
  
Drops a column from a table.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_primary_key --></div>
+
<!-- Pod2Wiki= -->
====@columns = $db-&gt;get_primary_key( $tablename )====
+
</div>
 +
<!-- Pod2Wiki=item__update -->
 +
====_update====
 +
 
 +
$rows = $db-&gt;_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.
  
Returns the list of column names that comprise the primary key for $tablename.
+
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.
  
Returns empty list if no primary key exists.
+
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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_index --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_index( $tablename, @columns )====
+
</div>
 +
<!-- Pod2Wiki=item_insert -->
 +
====insert====
  
Creates an index over @columns for $tablename. Returns true on success.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_unique_index --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_unique_index( $tablename, @columns )====
+
</div>
 +
<!-- Pod2Wiki=item_insert_quoted -->
 +
====insert_quoted====
  
Creates a unique index over @columns for $tablename. Returns true on success.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item__update --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;_update( $tablename, $keycols, $keyvals, $columns, @values )====
+
</div>
 +
<!-- Pod2Wiki=item_delete_from -->
 +
====delete_from====
  
UPDATES $tablename where $keycols equals $keyvals.
+
$success = $db-&gt;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>.
  
This method is internal.
+
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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item__update_quoted --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;_update_quoted( $tablename, $keycols, $keyvals, $columns, @qvalues )====
+
</div>
 +
<!-- Pod2Wiki=item_count_table -->
 +
====count_table====
  
UPDATES $tablename where $keycols equals $keyvals. Won't quote $keyvals or @qvalues before use - use this method with care!
+
$n = $db-&gt;count_table( $tablename )
 +
Return the number of rows in the specified SQL table with  <tt>$tablename</tt>.
  
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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_clear_table -->
 +
====clear_table====
 +
 
 +
$db-&gt;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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_insert --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;insert( $table, $columns, @values )====
+
</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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
  
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.
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- 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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_insert_quoted --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;insert_quoted( $table, $columns, @qvalues )====
+
</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 -->
 +
 
  
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.
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_prep_like_value -->
 +
====prep_like_value====
  
Values will NOT be quoted before insertion - care must be exercised!
+
$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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_delete_from --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;delete_from( $table, $columns, @values )====
+
</div>
 +
<!-- Pod2Wiki=item_quote_value -->
 +
====quote_value====
  
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.
+
$str = $db-&gt;quote_value( $value )
 +
Return a quoted version of <tt>$value</tt>. To quote a <tt>LIKE</tt> value  you should use:
  
If you want to clear a table completely use clear_table().
+
$db-&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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_quote_int -->
 +
====quote_int====
 +
 
 +
$str = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_add_record --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;add_record( $dataset, $data )====
+
</div>
 +
<!-- Pod2Wiki=item_quote_binary -->
 +
====quote_binary====
 +
 
 +
$str = $db-&gt;quote_binary( $bytes )
 +
Some databases (Oracle/PostgreSQL) require transforms of binary data to work correctly.
  
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.
+
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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_prep_int --></div>
+
<!-- Pod2Wiki= -->
====$mungedvalue = EPrints::Database::prep_int( $value )====
+
</div>
 +
<!-- Pod2Wiki=item_quote_ordervalue -->
 +
====quote_ordervalue====
  
Escape a numerical value for SQL. undef becomes NULL. Anything else becomes a number (zero if needed).
+
$str = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_prep_value --></div>
+
<!-- Pod2Wiki= -->
====$mungedvalue = EPrints::Database::prep_value( $value )====
+
</div>
 +
<!-- Pod2Wiki=item_quote_identifier -->
 +
====quote_identifier====
  
Escape a value for SQL. Modify value such that " becomes \" and \ becomes \\ and ' becomes \'
+
$str = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_prep_like_value --></div>
+
<!-- Pod2Wiki= -->
====$mungedvalue = EPrints::Database::prep_like_value( $value )====
+
</div>
 +
<!-- Pod2Wiki=item_prepare_regexp -->
 +
====prepare_regexp====
  
Escape an value for an SQL like field. In addition to ' " and \ also escapes % and _
+
$sql = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_quote_value --></div>
+
<!-- Pod2Wiki= -->
====$str = $db-&gt;quote_value( $value )====
+
</div>
 +
<!-- Pod2Wiki=item_sql_as -->
 +
====sql_as====
  
Return a quoted value. To quote a 'like' value you should do:
+
$sql = $db-&gt;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.
  
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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_quote_int --></div>
+
<!-- Pod2Wiki= -->
====$str = $db-&gt;quote_int( $value )====
+
</div>
 +
<!-- Pod2Wiki=item_sql_like -->
 +
====sql_like====
  
Return a quoted integer value
+
$sql = $db-&gt;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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_quote_binary --></div>
+
<!-- Pod2Wiki= -->
====$str = $db-&gt;quote_binary( $bytes )====
+
</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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
  
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}}.
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_counter_current -->
 +
====counter_current====
 +
 
 +
$n = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_quote_identifier --></div>
+
<!-- Pod2Wiki= -->
====$str = $db-&gt;quote_identifier( @parts )====
+
</div>
 +
<!-- Pod2Wiki=item_counter_next -->
 +
====counter_next====
  
Quote a database identifier (e.g. table names). Multiple @parts will be joined by dot.
+
$n = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_update --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;update( $dataset, $data, $changed, $insert )====
+
</div>
 +
<!-- Pod2Wiki=item_counter_minimum -->
 +
====counter_minimum====
  
Updates a record in the database with the given $data. Obviously the value of the primary key must be set.
+
$db-&gt;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.
  
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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_counter_reset -->
 +
====counter_reset====
 +
 
 +
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_remove --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;remove( $dataset, $id )====
+
</div>
 +
<!-- Pod2Wiki=item_next_doc_pos -->
 +
====next_doc_pos====
 +
 
 +
$n = $db-&gt;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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
  
Attempts to remove the record with the primary key $id from the  specified dataset.
 
  
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- 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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_counters --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_counters====
+
</div>
 +
<!-- Pod2Wiki=item_exists -->
 +
====exists====
  
Create the counters used to store the highest current id of eprints, users etc.
+
$boolean = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_has_counter --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;has_counter( $counter )====
+
</div>
 +
<!-- Pod2Wiki=item_add_record -->
 +
====add_record====
  
Returns true if $counter exists.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_counter --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;create_counter( $name )====
+
</div>
 +
<!-- Pod2Wiki=item_remove -->
 +
====remove====
 +
 
 +
$success = $db-&gt;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 -->
  
Create and initialise to zero a new counter called $name.
 
  
 +
<!-- 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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_remove_counters --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;remove_counters====
+
</div>
 +
<!-- Pod2Wiki=item_cache_exp -->
 +
====cache_exp====
  
Destroy all counters.
+
$searchexp = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_counter --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;drop_counter( $name )====
+
</div>
 +
<!-- Pod2Wiki=item_cache -->
 +
====cache====
 +
 
 +
$cacheid = $db-&gt;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.
  
Destroy the counter named $name.
+
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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_next_doc_pos --></div>
+
<!-- Pod2Wiki= -->
====$n = $db-&gt;next_doc_pos( $eprintid )====
+
</div>
 +
<!-- Pod2Wiki=item_cache_table -->
 +
====cache_table====
  
Return the next unused document pos for the given eprintid.
+
$tablename = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_counter_current --></div>
+
<!-- Pod2Wiki= -->
====$n = $db-&gt;counter_current( $counter )====
+
</div>
 +
<!-- Pod2Wiki=item_cache_userid -->
 +
====cache_userid====
  
Return the value of the previous counter_next on $counter.
+
$userid = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_counter_next --></div>
+
<!-- Pod2Wiki= -->
====$n = $db-&gt;counter_next( $counter )====
+
</div>
 +
<!-- Pod2Wiki=item_get_cachemap -->
 +
====get_cachemap====
  
Return the next unused value for the named counter. Returns undef if  the counter doesn't exist.
+
$cachemap = $db-&gt;get_cachemap( $id )
 +
Return the cachemap with $&lt;id&gt;.
  
 
<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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_counter_minimum --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;counter_minimum( $counter, $value )====
+
</div>
 +
<!-- Pod2Wiki=item_search -->
 +
====search====
  
Ensure that the counter is set no lower than $value. This is used when importing eprints which may not be in scrict sequence.
+
$ids = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_counter_reset --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;counter_reset( $counter )====
+
</div>
 +
<!-- Pod2Wiki=item_drop_cache -->
 +
====drop_cache====
  
Reset the counter. Use with caution.
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_cache_exp --></div>
+
<!-- Pod2Wiki= -->
====$searchexp = $db-&gt;cache_exp( $cacheid )====
+
</div>
 +
<!-- Pod2Wiki=item_from_cache -->
 +
====from_cache====
  
Return the serialised Search of a the cached search with id $cacheid. Return undef if the id is invalid or expired.
+
$items = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_cache --></div>
+
<!-- Pod2Wiki= -->
====$cacheid = $db-&gt;cache( $searchexp, $dataset, $srctable, [$order], [$list] )====
+
</div>
 +
<!-- Pod2Wiki=item_drop_orphan_cache_tables -->
 +
====drop_orphan_cache_tables====
  
Create a cache of the specified search expression from the SQL table $srctable.
+
$c = $db-&gt;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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
  
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.
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_get_single -->
 +
====get_single====
  
If $srctable is set to "ALL" every matching record from $dataset is added to the cache, optionally ordered by $order.
+
$obj = $db-&gt;get_single( $dataset, $id )
 +
Return a single &lt;EPrints::DataObj&gt; 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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_cache_table --></div>
+
<!-- Pod2Wiki= -->
====$tablename = $db-&gt;cache_table( $id )====
+
</div>
 +
<!-- Pod2Wiki=item_get_all -->
 +
====get_all====
  
Return the SQL table used to store the cache with id $id.
+
$items = $db-&gt;get_all( $dataset )
 +
Returns a reference to an array with all the &lt;EPrints::DataObj&gt;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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_index_ids --></div>
+
<!-- Pod2Wiki= -->
====$ids = $db-&gt;get_index_ids( $table, $condition )====
+
</div>
 +
<!-- Pod2Wiki=item_get_cache_ids -->
 +
====get_cache_ids====
  
Return a reference to an array of the distinct primary keys from the given SQL table which match the specified condition.
+
@ids = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_search --></div>
+
<!-- Pod2Wiki= -->
====$ids = $db-&gt;search( $keyfield, $tables, $conditions, [$main_table_alias] )====
+
</div>
 +
<!-- Pod2Wiki=item_get_dataobjs -->
 +
====get_dataobjs====
  
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.  
+
@dataobjs = $db-&gt;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.
  
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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_get_values -->
 +
====get_values====
 +
 
 +
$values = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_cache --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;drop_cache( $id )====
+
</div>
 +
<!-- Pod2Wiki=item_sort_values -->
 +
====sort_values====
  
Remove the cached search with the given id.
+
$values = $db-&gt;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-&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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_count_table --></div>
+
<!-- Pod2Wiki= -->
====$n = $db-&gt;count_table( $tablename )====
+
</div>
 +
<!-- Pod2Wiki=item_get_ids_by_field_values -->
 +
====get_ids_by_field_values====
  
Return the number of rows in the specified SQL table.
+
$ids = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_from_cache --></div>
+
<!-- Pod2Wiki= -->
====$foo = $db-&gt;from_cache( $dataset, $cacheid, [$offset], [$count], [$justids] )====
+
</div>
 +
<!-- Pod2Wiki=item_dequeue_events -->
 +
====dequeue_events====
 +
 
 +
@events = $db-&gt;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.
  
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.
+
<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 -->
  
$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.
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_ci_lookup -->
 +
====ci_lookup====
 +
 
 +
$value = $db-&gt;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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_orphan_cache_tables --></div>
+
<!-- Pod2Wiki= -->
====$c = $db-&gt;drop_orphan_cache_tables====
+
</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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
  
Drop tables called "cacheXXX" where XXX is an integer. Returns the number of tables dropped.
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_valid_login -->
 +
====valid_login====
 +
 
 +
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_single --></div>
+
<!-- Pod2Wiki= -->
====$obj = $db-&gt;get_single( $dataset, $id )====
+
</div>
 +
<!-- Pod2Wiki=item_secret_matches -->
 +
====secret_matches====
  
Return a single item from the given dataset. The one with the specified id.
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_all --></div>
+
<!-- Pod2Wiki= -->
====$items = $db-&gt;get_all( $dataset )====
+
</div>
 +
<!-- Pod2Wiki=item_is_secret_set -->
 +
====is_secret_set====
 +
 
 +
$boolean = $db-&gt;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 -->
  
Returns a reference to an array with all the items from the given dataset.
 
  
 +
<!-- 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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_cache_ids --></div>
+
<!-- Pod2Wiki= -->
====@ids = $db-&gt;get_cache_ids( $dataset, $cachemap, $offset, $count )====
+
</div>
 +
<!-- Pod2Wiki=item_has_sequence -->
 +
====has_sequence====
  
Returns a list of $count ids from $cache_id starting at $offset and in the order in the cachemap.
+
$boolean = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_dataobjs --></div>
+
<!-- Pod2Wiki= -->
====@dataobjs = $db-&gt;get_dataobjs( $dataset [, $id [, $id ] ] )====
+
</div>
 +
<!-- Pod2Wiki=item_create_sequence -->
 +
====create_sequence====
  
Retrieves the records in $dataset with the given $id(s). If an $id doesn't exist in the database it will be ignored.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_values --></div>
+
<!-- Pod2Wiki= -->
====$foo = $db-&gt;get_values( $field, $dataset )====
+
</div>
 +
<!-- Pod2Wiki=item_drop_sequence -->
 +
====drop_sequence====
  
Return a reference to an array of all the distinct values of the  EPrints::MetaField specified.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_sort_values --></div>
+
<!-- Pod2Wiki= -->
====$values = $db-&gt;sort_values( $field, $values [, $langid ] )====
+
</div>
 +
<!-- Pod2Wiki=item_has_column -->
 +
====has_column====
  
ALPHA!!! Liable to API change!!!
+
$boolean = $db-&gt;has_column( $table, $column )
 +
Return <tt>true</tt> if the named <tt>$table</tt> has the named <tt>$column</tt> in the  database.
  
Sorts and returns the list of $values using 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 -->
  
$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.
+
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_drop_column -->
 +
====drop_column====
 +
 
 +
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_ids_by_field_values --></div>
+
<!-- Pod2Wiki= -->
====$ids = $db-&gt;get_ids_by_field_values( $field, $dataset [ %opts ] )====
+
</div>
 +
<!-- Pod2Wiki=item_get_primary_key -->
 +
====get_primary_key====
  
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.
+
@columns = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_do --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;do( $sql )====
+
</div>
 +
<!-- Pod2Wiki=item_index_name -->
 +
====index_name====
  
Execute the given SQL.
+
$name = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_prepare --></div>
+
<!-- Pod2Wiki= -->
====$sth = $db-&gt;prepare( $sql )====
+
</div>
 +
<!-- Pod2Wiki=item_get_index_ids -->
 +
====get_index_ids====
  
Prepare the given $sql and return a handle on it.
+
$ids = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_prepare_select --></div>
+
<!-- Pod2Wiki= -->
====$sth = $db-&gt;prepare_select( $sql [, %options ] )====
+
</div>
 +
<!-- Pod2Wiki=item_create_index -->
 +
====create_index====
 +
 
 +
$success = $db-&gt;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.
  
Prepare a SELECT statement $sql and return a handle to it. After preparing a statement use execute() to execute it.
+
<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 -->
  
The LIMIT SQL keyword is not universally supported, to specify a LIMIT you must use the '''limit''' option.
 
  
Options:
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_create_unique_index -->
 +
====create_unique_index====
 +
 
 +
$success = $db-&gt;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.
  
  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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_execute --></div>
+
<!-- Pod2Wiki= -->
====$success = $db-&gt;execute( $sth, $sql )====
+
</div>
 +
<!-- Pod2Wiki=item_create_foreign_key -->
 +
====create_foreign_key====
 +
 
 +
$ok = $db-&gt;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>.
  
Execute the SQL prepared earlier. $sql is only passed in for debugging purposes.
+
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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_has_dataset --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;has_dataset( $dataset )====
+
</div>
 +
<!-- Pod2Wiki=item_get_tables -->
 +
====get_tables====
  
Returns true if $dataset exists in the database or has no database tables.
+
@tables = $db-&gt;get_tables( [ $dbname ] )
 +
Returns a list of all the tables in the database.
  
This does not check that all fields are configured - see has_field().
+
<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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_has_field --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;has_field( $dataset, $field )====
+
</div>
 +
<!-- Pod2Wiki=item_has_table -->
 +
====has_table====
  
Returns true if $field is in the database for $dataset.
+
$boolean = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_add_field --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;add_field( $dataset, $field [, $force ] )====
+
</div>
 +
<!-- Pod2Wiki=item_create_table -->
 +
====create_table====
  
Add $field to $dataset's tables.
+
$success = $db-&gt;create_table( $tablename, $setkey, @fields );
 +
Creates a new table with <tt>$tablename</tt> based on <tt>@fields</tt>.
  
If $force is true will modify/replace an existing column (use with care!).
+
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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_remove_field --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;remove_field( $dataset, $field )====
+
</div>
 +
<!-- Pod2Wiki=item_drop_table -->
 +
====drop_table====
  
Remove $field from $dataset's tables.
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_rename_field --></div>
+
<!-- Pod2Wiki= -->
====$ok = $db-&gt;rename_field( $dataset, $field, $old_name )====
+
</div>
 +
<!-- Pod2Wiki=item_rename_table -->
 +
====rename_table====
  
Rename a $field in the database from it's old name $old_name.
+
$db-&gt;rename_table( $table_from, $table_to )
 +
Renames the table named <tt>$table_from</tt> to <tt>$table_to</tt>.
  
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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_swap_table -->
 +
====swap_table====
 +
 
 +
$db-&gt;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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_exists --></div>
+
<!-- Pod2Wiki= -->
====$boolean = $db-&gt;exists( $dataset, $id )====
+
</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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
  
Return true if a record with the given primary key exists in the dataset, otherwise false.
+
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_create_archive_tables -->
 +
====create_archive_tables====
 +
 
 +
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_set_debug --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;set_debug( $boolean )====
+
</div>
 +
<!-- Pod2Wiki=item_drop_archive_tables -->
 +
====drop_archive_tables====
  
Set the SQL debug mode to true or false.
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_create_version_table --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;create_version_table====
+
</div>
 +
<!-- Pod2Wiki=item_create_version_table -->
 +
====create_version_table====
  
Make the version table (and set the only value to be the current version of eprints).
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_version_table --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;drop_version_table====
+
</div>
 +
<!-- Pod2Wiki=item_drop_version_table -->
 +
====drop_version_table====
  
 +
$db-&gt;drop_version_table
 
Drop the version table.
 
Drop the version table.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_set_version --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;set_version( $versionid );====
+
</div>
 +
<!-- Pod2Wiki=item_has_dataset -->
 +
====has_dataset====
  
Set the version id table in the SQL database to the given value (used by the upgrade script).
+
$db-&gt;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 &lt;/has_field&gt;.
  
 
<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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_has_table --></div>
+
<!-- Pod2Wiki= -->
====$boolean = $db-&gt;has_table( $tablename )====
+
</div>
 +
<!-- Pod2Wiki=item_has_dataset_index_tables -->
 +
====has_dataset_index_tables====
  
Return true if a table of the given name exists in the database.
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_has_column --></div>
+
<!-- Pod2Wiki= -->
====$boolean = $db-&gt;has_column( $tablename, $columnname )====
+
</div>
 +
<!-- Pod2Wiki=item_create_dataset_tables -->
 +
====create_dataset_tables====
  
Return true if the a table of the given name has a column named $columnname in the database.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_drop_table --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;drop_table( $tablename )====
+
</div>
 +
<!-- Pod2Wiki=item_drop_dataset_tables -->
 +
====drop_dataset_tables====
  
Delete the named table. Use with caution!
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_clear_table --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;clear_table( $tablename )====
+
</div>
 +
<!-- Pod2Wiki=item_create_dataset_index_tables -->
 +
====create_dataset_index_tables====
  
Clears all records from the given table, use with caution!
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_rename_table --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;rename_table( $tablename, $newtablename )====
+
</div>
 +
<!-- Pod2Wiki=item_create_dataset_ordervalues_tables -->
 +
====create_dataset_ordervalues_tables====
  
Renames the table from the old name to the new one.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_swap_table --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;swap_table( $table_a, $table_b )====
+
</div>
 +
<!-- Pod2Wiki=item_has_field -->
 +
====has_field====
  
Swap table a and table b.  
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_tables --></div>
+
<!-- Pod2Wiki= -->
====@tables = $db-&gt;get_tables====
+
</div>
 +
<!-- Pod2Wiki=item_add_field -->
 +
====add_field====
  
Return a list of all the tables in the database.
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_version --></div>
+
<!-- Pod2Wiki= -->
====$version = $db-&gt;get_version====
+
</div>
 +
<!-- Pod2Wiki=item_remove_field -->
 +
====remove_field====
  
Return the version of eprints which the database is compatable with or undef if unknown (before v2.1).
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_is_latest_version --></div>
+
<!-- Pod2Wiki= -->
====$boolean = $db-&gt;is_latest_version====
+
</div>
 +
<!-- Pod2Wiki=item_rename_field -->
 +
====rename_field====
  
Return true if the SQL tables are in the correct configuration for this edition of eprints. Otherwise false.
+
$ok = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_valid_login --></div>
+
<!-- Pod2Wiki= -->
====$db-&gt;valid_login( $username, $password )====
+
</div>
 +
<!-- Pod2Wiki=item_create_counters -->
 +
====create_counters====
  
Returns whether the clear-text $password matches the stored crypted password for $username.
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_server_version --></div>
+
<!-- Pod2Wiki= -->
====$version = $db-&gt;get_server_version====
+
</div>
 +
<!-- Pod2Wiki=item_has_counter -->
 +
====has_counter====
  
Return the database server version.
+
$success = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_default_charset --></div>
+
<!-- Pod2Wiki= -->
====$charset = $db-&gt;get_default_charset( LANGUAGE )====
+
</div>
 +
<!-- Pod2Wiki=item_create_counter -->
 +
====create_counter====
 +
 
 +
$success = $db-&gt;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%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
  
Return the character set to use for LANGUAGE.
+
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_remove_counters -->
 +
====remove_counters====
  
Returns undef if character sets are unsupported.
+
$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%; '>
 
<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>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_default_collation --></div>
+
<!-- Pod2Wiki= -->
====$collation = $db-&gt;get_default_collation( LANGUAGE )====
+
</div>
 +
<!-- Pod2Wiki=item_drop_counter -->
 +
====drop_counter====
  
Return the collation to use for LANGUAGE.
+
$success = $db-&gt;drop_counter( $name )
 +
Destroy the counter named <tt>$name</tt>.
  
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%; '>
 +
<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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_get_driver_name --></div>
+
<!-- Pod2Wiki= -->
====$driver = $db-&gt;get_driver_name====
+
</div>
 +
<!-- Pod2Wiki=item_save_user_message -->
 +
====save_user_message====
  
Return the database driver name.
+
$message = $db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=for --></div>
+
<!-- Pod2Wiki= -->
INTERNAL<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
+
</div>
<h4><span style='display:none'>User Comments</span></h4>
+
<!-- Pod2Wiki=item_get_user_messages -->
 +
====get_user_messages====
 +
 
 +
@messages = $db-&gt;get_user_messages( $userid, %opts )
 +
Get the messages for a user with ID <tt>$userid</tt> and clear messages if <tt>$opt{clear}</tt> is set.
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_dequeue_events --></div>
+
<!-- Pod2Wiki= -->
====@events = $db-&gt;dequeue_events( $n )====
+
</div>
 +
<!-- Pod2Wiki=item_clear_user_messages -->
 +
====clear_user_messages====
  
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.
+
$db-&gt;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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
<!-- Pod2Wiki=item_prepare_regexp --></div>
+
<!-- Pod2Wiki= -->
====$sql = $db-&gt;prepare_regexp( $quoted_column, $quoted_value )====
+
</div>
 +
<!-- Pod2Wiki=head_see_also -->
 +
==SEE ALSO==
 +
To access database-stored objects use the methods provided by the  following modules: [[API:EPrints/Repository|EPrints::Repository]], [[API:EPrints/DataSet|EPrints::DataSet]].
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
  
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).
 
  
 +
<!-- 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%; '>
<h4><span style='display:none'>User Comments</span></h4>
+
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
<!-- Edit below this comment -->
  
  
 +
<!-- Pod2Wiki= -->
 +
</div>
 
<!-- Pod2Wiki=_postamble_ --><!-- Edit below this comment -->
 
<!-- Pod2Wiki=_postamble_ --><!-- Edit below this comment -->

Latest revision as of 21:20, 4 March 2022

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


API: Core API

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


Contents

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.

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.

User Comments


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.

User Comments


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.

User Comments


CONSTANTS

All the SQL_ column types defined by Perl module DBI and the following:

User Comments


SQL_NULL

A column value is undefined.

User Comments


SQL_NOT_NULL

A column value is defined.

User Comments


INSTANCE VARIABLES

User Comments


$self->{session}

The EPrints::Session which is associated with this database connection.

User Comments


$self->{debug}

If true then SQL is logged.

User Comments


$self->{dbh}

The handle on the actual database connection.

User Comments


METHODS

User Comments


Database

User Comments


new

$db = EPrints::Database->new( $repo, [ %opts ] )

Create a connection to the database.

Options:

 db_connect - Boolean. Also connect to the database (default: true).

User Comments


create

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

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

User Comments


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.

User Comments


connect

$db->connect()

Connects to the database.

User Comments


disconnect

$db->disconnect()

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

User Comments


set_debug

$db->set_debug( $boolean )

Set the SQL debug mode to true or false.

User Comments


set_version

$db->set_version( $versionid );

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

User Comments


get_version

$version = $db->get_version

Returns the current database schema version.

User Comments


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.

User Comments


get_server_version

$version = $db->get_server_version

Return the database server version.

User Comments


get_default_charset

$charset = $db->get_default_charset

Return the character set to use.

Returns undef if character sets are unsupported.

User Comments


get_default_collation

$collation = $db->get_default_collation( $lang )

Return the collation to use for language $lang.

Returns undef if collation is unsupported.

User Comments


get_driver_name

$driver = $db->get_driver_name

Return the database driver name.

User Comments


error

$errstr = $db->error()

Return a string describing the last SQL error.

User Comments


retry_error

$boolean = $db->retry_error()

Returns a boolean for whether the database error is a retry error.

User Comments


duplicate_error

$boolean = $db->duplicate_error()

Returns a boolean for whether the database error is a duplicate error.

User Comments


begin

$db->begin()

Begin a transaction.

User Comments


commit

$db->commit()

Commit the previously begun transaction.

User Comments


rollback

$db->rollback()

Rollback the partially completed transaction.

User Comments


type_info

$type_info = $db->type_info( $data_type )

See DBI/type_info.

User Comments


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.

User Comments


Basic SQL Operations

User Comments


do

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

Execute the given $sql.

User Comments


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;
 

User Comments


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
 

User Comments


execute

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

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

User Comments


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.

User Comments


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

User Comments


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.

User Comments


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!

User Comments


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

User Comments


count_table

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

Return the number of rows in the specified SQL table with $tablename.

User Comments


clear_table

$db->clear_table( $tablename )

Clears all records from the given table with $tablename. Use with caution!

User Comments


Quoting

User Comments


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

User Comments


prep_value

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

Escape $value for an SQL statement. Modify value such that " becomes \" and \ becomes \\ and ' becomes \'.

User Comments


prep_like_value

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

Escape $value for an SQL LIKE clause. In addition to ' " and \ also escapes % and _.

User Comments


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 ) . '%' );
 

User Comments


quote_int

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

Return a quoted integer for $value.

User Comments


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.

User Comments


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.

User Comments


quote_identifier

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

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

User Comments


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.

User Comments


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.

User Comments


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.

User Comments


Counters

User Comments


counter_current

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

Return the value of the previous counter_next on $counter.

User Comments


counter_next

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

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

User Comments


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.

User Comments


counter_reset

$db->counter_reset( $counter )

Reset the $counter. Use with caution.

User Comments


next_doc_pos

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

Return the next unused document position for the given $eprintid.

User Comments


Dataset Data

User Comments


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.

User Comments


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.

User Comments


remove

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

Attempts to remove the EPrints::DataObj with the primary key $id from the specified $dataset.

User Comments


Searching, caching and object retrieval

User Comments


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.

User Comments


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.

User Comments


cache_table

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

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

User Comments


cache_userid

$userid = $db->cache_userid( $id )

Returns the userid associated with the cache with $id if that cache exists.

User Comments


get_cachemap

$cachemap = $db->get_cachemap( $id )

Return the cachemap with $<id>.

User Comments


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.

User Comments


drop_cache

$db->drop_cache( $id )

Remove the cached search with the given $id.

User Comments


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.

User Comments


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.

User Comments


get_single

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

Return a single <EPrints::DataObj> from the given $dataset with primary key set to $id.

User Comments


get_all

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

Returns a reference to an array with all the <EPrints::DataObj>s from the given $dataset.

User Comments


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.

User Comments


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.

User Comments


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.

User Comments


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.

User Comments


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.

User Comments


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.

User Comments


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.

User Comments


Password Validation and Secret Fields

User Comments


valid_login

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

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

User Comments


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.

User Comments


is_secret_set

$boolean = $db->is_secret_set( $dataobj, $fieldname )

Returns a boolean for whether the secret $fieldname for $dataobj has a value set.

User Comments


Database Schema Manipulation

User Comments


has_sequence

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

Returns true if a sequence of the given $name exists in the database. Otherwise, returns false.

User Comments


create_sequence

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

Creates a new sequence object with $name and initialises to zero.

User Comments


drop_sequence

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

Deletes a sequence object with $name.

User Comments


has_column

$boolean = $db->has_column( $table, $column )

Return true if the named $table has the named $column in the database.

User Comments


drop_column

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

Drops the named $column from the named $table.

User Comments


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.

User Comments


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.

User Comments


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.

User Comments


create_index

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

Creates an index over @columns for named $table. Returns true on success, false otherwise.

User Comments


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.

User Comments


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.

User Comments


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.

User Comments


has_table

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

Returns boolean dependent on whether a table of the $tablename exists in the database.

User Comments


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.

User Comments


drop_table

$db->drop_table( @tables )

Delete the named @tables. Use with caution!

User Comments


rename_table

$db->rename_table( $table_from, $table_to )

Renames the table named $table_from to $table_to.

User Comments


swap_table

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

Renames table named $table_a to $table_b and vice-versa.

User Comments


EPrints Schema Manipulation

User Comments


create_archive_tables

$success = $db->create_archive_tables()

Create all the SQL tables for all datasets.

User Comments


drop_archive_tables

$db->drop_archive_tables()

Destroy all tables used by EPrints in the database.

User Comments


create_version_table

$db->create_version_table

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

User Comments


drop_version_table

$db->drop_version_table

Drop the version table.

User Comments


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

User Comments


has_dataset_index_tables

$db->has_dataset_index_tables( $dataset )

Returns true if index tables for $dataset exists of if this is not indexable.

User Comments


create_dataset_tables

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

Creates all the SQL tables for the specified $dataset.

User Comments


drop_dataset_tables

$db->drop_dataset_tables( $dataset )

Drops all the SQL tables for the specified $dataset.

User Comments


create_dataset_index_tables

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

Creates all the index tables for the specified $dataset.

User Comments


create_dataset_ordervalues_tables

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

Creates all the ordervalues tables for the specified $dataset.

User Comments


has_field

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

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

User Comments


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!

User Comments


remove_field

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

Remove $field from $dataset's tables.

User Comments


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.

User Comments


create_counters

$success = $db->create_counters

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

User Comments


has_counter

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

Returns true if $counter exists.

User Comments


create_counter

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

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

User Comments


remove_counters

$success = $db->remove_counters

Destroy all counters.

User Comments


drop_counter

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

Destroy the counter named $name.

User Comments


User Messages

User Comments


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.

User Comments


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.

User Comments


clear_user_messages

$db->clear_user_messages( $userid )

Clear all messages for user with ID $userid.

User Comments


SEE ALSO

To access database-stored objects use the methods provided by the following modules: EPrints::Repository, EPrints::DataSet.

User Comments


COPYRIGHT

© Copyright 2023 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/.

User Comments