internal package Foswiki::DBI::Schema internal package Foswiki::DBI::Schema getType() and getDefinition()
The schema base is then passed on to Foswiki::DBI::loadSchema()
See Foswiki::DBI for more information.
ClassMethod new() Constructs an object of this type.
ObjectMethod getType() → $string Foswiki::Plugins::LikePlugin::Schema::getType()
returns the string "LikePlugin". This string may be used in the
schema definition using the "%prefix%" placeholder.
ObjectMethod getDefinition() → $array %prefix% placeholder being
replaced by the value of getType()
For example, the $array returned by the subclass may look like this:
sub getDefinition {
return [[
'CREATE TABLE IF NOT EXISTS %prefix%likes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
web VARCHAR(255),
topic VARCHAR(255),
meta_type CHAR(20),
meta_id VARCHAR(255),
username VARCHAR(255),
like_count INTEGER DEFAULT 0,
dislike_count INTEGER DEFAULT 0,
timestamp INTEGER
)',
'CREATE UNIQUE INDEX IF NOT EXISTS %prefix%_idx_likes on %prefix%likes (web, topic, username, meta_type, meta_id)'
], [
"ALTER TABLE %prefix%likes ..."
]];
}
In a first version of the schema definition, it create a table LikePlugin_likes and an index LikePlugin_idx_likes.
Later on during the life span of the LikePlugin a modification to the initial definition is required. That's why
there is a second element with an "ALTER TABLE" clause to update any preexisting SQL structure incrementally.
This approach migrates a table structure seamlessly as required. The required updates are tracked by the schema loader
of DBIPlugin. The version of the schema is being tracked in a separate table db_meta. In the above example
an entry will be added to the db_meta table for the "LikePlugin" schema being of version 2 (as there are two elements in
the returned $array.