PerlDoc

See PublishedAPI for packages intended to be used by Plugin and Contrib authors, or browse all packages.
See also Developing plugins, Developer's Bible, Technical Overview


Parent package: Foswiki::DBI
Child packages:

internal package Foswiki::DBI::Database

abstract class for any type of database connecting to foswiki

ClassMethod new()

Constructs a Foswiki::DBI::Database object. This class is mostly subclassed by the acutal database implementation being configured, such as Foswiki::DBI::Database::MariaDB. Subclasses need to specify the actual DBD driver to connect to the database.

ObjectMethod getClassName() → $string

Returns the base name of this database representing the current implementation, such as MariaDB

ObjectMethod applySchema($schema)

Applies the Schema to the connected database. this is called only once when the database is connected. note that the schema must test for existing tables and indexes on its own.

ObjectMethod schemaVersion($type, $version) → $version

getter/setter for the schema version meta data

ObjectMethod handler() → $dbh

Returns the DBD handler that this class is delegating all work to

ObjectMethod connect()

Connects to the database if not already done so and returns a DBI::db handler. this method is called automatically when the db handler is established

ObjectMethod finish()

Called solely by Foswikik::DBI::finish() to finalize the database connection and close any open sockets.

ObjectMethod eachRow($tableName, %params) → $iterator

Returns an object of class Foswiki::Iterator::DBIterator for the given parameters. This is a convenience wrapper for

my $it = Foswiki::Iterator::DBIterator->new($dbh, $stm);

The statement handler is created based on the parameters provided. The %params parameter is a hash with the following values:

  • columns: list of columns to return, defaults to "*"
  • avg: column to compute an average for
  • sum: column to compute the sum for
  • having: "HAVING" clause SQL statement
  • groupBy: groupBy "GROUP BY" clause
  • sort, orderBy: "SORT" clause
  • filter: "WHERE" clause
  • groupConcat: "GROUP_CONCAT(DISTINCT …)" clause
  • count: if defined adds a "COUNT(*) clause, if count is prefixed with "unique" will add a "COUNT(DISTINCT …)"
  • <colName>: <colVal> … will add a "colName1='colVal1'" to the "WHERE" clause

Note that all parameters except $tableName are optional.

Example:

my $it = Foswiki::DBI::getDB->eachRow("SomeTable", 
  count => "*"
  firstName => "Michael"
);

while ($it->hasNext) {
  my $row = $it->next();

  my $firstName = $row->{firstName};
  my $middleName = $row->{middleName};
  my $lastName = $row->{lastName};
  my $count = $row->{count};

  ...
}

Topic revision: r1 - 06 Aug 2023, UnknownUser
This site is powered by FoswikiCopyright © by the contributing authors. All material on this site is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback