StorageServer install: Added more error checking and better code resuse and also fixed a bug where a table was not removed on uninstall because the tables were removed in the wrong order. Install of scheduler was moved to the products/scheduler/bin directory.

This commit is contained in:
paul 2007-01-09 17:30:46 +00:00
parent 219c8cc06f
commit 2e37fb9c66
9 changed files with 324 additions and 306 deletions

View file

@ -1,6 +1,5 @@
<?php
/**
* @author Tomas Hlava <th@red2head.com>
* @author Paul Baranowski <paul@paulbaranowski.org>
* @version $Revision: 2475 $
* @package Campcaster
@ -19,92 +18,67 @@ if (isset($arr["DOCUMENT_ROOT"]) && ($arr["DOCUMENT_ROOT"] != "") ) {
exit(1);
}
if (!function_exists('pg_connect')) {
trigger_error("PostgreSQL PHP extension required and not found.", E_USER_ERROR);
exit(2);
}
require_once('DB.php');
function camp_db_table_exists($p_name)
{
global $CC_DBC;
$sql = "SELECT * FROM ".$p_name;
$result = $CC_DBC->GetOne($sql);
if (PEAR::isError($result)) {
return false;
}
return true;
}
$CC_DBC = DB::connect($CC_CONFIG['dsn'], TRUE);
if (PEAR::isError($CC_DBC)) {
echo $CC_DBC->getMessage()."\n";
echo $CC_DBC->getUserInfo()."\n";
echo "Database connection problem.\n";
echo "Check if database '{$CC_CONFIG['dsn']['database']}' exists".
" with corresponding permissions.\n";
echo "Database access is defined by 'dsn' values in var/conf.php ".
"(in storageServer directory).\n";
exit(1);
} else {
echo " * Connected to database\n";
}
$CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC);
//------------------------------------------------------------------------------
// Install database tables
//------------------------------------------------------------------------------
if (!camp_db_table_exists($CC_CONFIG['treeTable'])) {
echo " * Creating database table ".$CC_CONFIG['treeTable']."...";
$r = $CC_DBC->query("CREATE TABLE ".$CC_CONFIG['treeTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['treeTable']." (
id int not null PRIMARY KEY,
name varchar(255) not null default'',
-- parid int,
type varchar(255) not null default'',
param varchar(255))");
if (PEAR::isError($r)) {
echo $r->getMessage()."\n";
}
param varchar(255))";
camp_install_query($sql, false);
$CC_DBC->createSequence($CC_CONFIG['treeTable']."_id_seq");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['treeTable']."_id_idx
ON ".$CC_CONFIG['treeTable']." (id)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['treeTable']."_name_idx
ON ".$CC_CONFIG['treeTable']." (name)");
echo "done.\n";
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['treeTable']."_id_idx
ON ".$CC_CONFIG['treeTable']." (id)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['treeTable']."_name_idx
ON ".$CC_CONFIG['treeTable']." (name)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['treeTable']."\n";
}
if (!camp_db_table_exists($CC_CONFIG['structTable'])) {
echo " * Creating database table ".$CC_CONFIG['structTable']."...";
$CC_DBC->query("CREATE TABLE ".$CC_CONFIG['structTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['structTable']." (
rid int not null PRIMARY KEY,
objid int not null REFERENCES ".$CC_CONFIG['treeTable']." ON DELETE CASCADE,
parid int not null REFERENCES ".$CC_CONFIG['treeTable']." ON DELETE CASCADE,
level int
)");
level int)";
camp_install_query($sql, false);
$CC_DBC->createSequence($CC_CONFIG['structTable']."_id_seq");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_rid_idx
ON ".$CC_CONFIG['structTable']." (rid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['structTable']."_objid_idx
ON ".$CC_CONFIG['structTable']." (objid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['structTable']."_parid_idx
ON ".$CC_CONFIG['structTable']." (parid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['structTable']."_level_idx
ON ".$CC_CONFIG['structTable']." (level)");
$CC_DBC->query("
CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_objid_level_idx
ON ".$CC_CONFIG['structTable']." (objid, level)
");
$CC_DBC->query("
CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_objid_parid_idx
ON ".$CC_CONFIG['structTable']." (objid, parid)
");
echo "done.\n";
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_rid_idx
ON ".$CC_CONFIG['structTable']." (rid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_objid_idx
ON ".$CC_CONFIG['structTable']." (objid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_parid_idx
ON ".$CC_CONFIG['structTable']." (parid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_level_idx
ON ".$CC_CONFIG['structTable']." (level)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_objid_level_idx
ON ".$CC_CONFIG['structTable']." (objid, level)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_objid_parid_idx
ON ".$CC_CONFIG['structTable']." (objid, parid)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['structTable']."\n";
}
@ -137,35 +111,39 @@ if (!PEAR::isError($row) && !$row) {
if (!camp_db_table_exists($CC_CONFIG['classTable'])) {
echo " * Creating database table ".$CC_CONFIG['classTable']."...";
$CC_DBC->query("CREATE TABLE ".$CC_CONFIG['classTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['classTable']." (
id int not null PRIMARY KEY,
cname varchar(20)
)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['classTable']."_id_idx
ON ".$CC_CONFIG['classTable']." (id)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['classTable']."_cname_idx
ON ".$CC_CONFIG['classTable']." (cname)");
echo "done.\n";
cname varchar(20))";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['classTable']."_id_idx
ON ".$CC_CONFIG['classTable']." (id)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['classTable']."_cname_idx
ON ".$CC_CONFIG['classTable']." (cname)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['classTable']."\n";
}
if (!camp_db_table_exists($CC_CONFIG['cmembTable'])) {
echo " * Creating database table ".$CC_CONFIG['cmembTable']."...";
$CC_DBC->query("CREATE TABLE ".$CC_CONFIG['cmembTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['cmembTable']." (
objid int not null,
cid int not null
)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['cmembTable']."_idx
ON ".$CC_CONFIG['cmembTable']." (objid, cid)");
echo "done.\n";
cid int not null)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['cmembTable']."_idx
ON ".$CC_CONFIG['cmembTable']." (objid, cid)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['cmembTable']."\n";
}
if (!camp_db_table_exists($CC_CONFIG['subjTable'])) {
echo " * Creating database table ".$CC_CONFIG['subjTable']."...";
$CC_DBC->query("CREATE TABLE ".$CC_CONFIG['subjTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['subjTable']." (
id int not null PRIMARY KEY,
login varchar(255) not null default'',
pass varchar(255) not null default'',
@ -173,11 +151,17 @@ if (!camp_db_table_exists($CC_CONFIG['subjTable'])) {
realname varchar(255) not null default'',
lastlogin timestamp,
lastfail timestamp
)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['subjTable']."_id_idx
ON ".$CC_CONFIG['subjTable']." (id)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['subjTable']."_login_idx
ON ".$CC_CONFIG['subjTable']." (login)");
)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['subjTable']."_id_idx
ON ".$CC_CONFIG['subjTable']." (id)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['subjTable']."_login_idx
ON ".$CC_CONFIG['subjTable']." (login)";
camp_install_query($sql, false);
$CC_DBC->createSequence($CC_CONFIG['subjTable']."_id_seq");
echo "done.\n";
} else {
@ -186,15 +170,18 @@ if (!camp_db_table_exists($CC_CONFIG['subjTable'])) {
if (!camp_db_table_exists($CC_CONFIG['smembTable'])) {
echo " * Creating database table ".$CC_CONFIG['smembTable']."...";
$CC_DBC->query("CREATE TABLE ".$CC_CONFIG['smembTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['smembTable']." (
id int not null PRIMARY KEY,
uid int not null default 0,
gid int not null default 0,
level int not null default 0,
mid int
)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['smembTable']."_id_idx
ON ".$CC_CONFIG['smembTable']." (id)");
mid int)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['smembTable']."_id_idx
ON ".$CC_CONFIG['smembTable']." (id)";
camp_install_query($sql, false);
$CC_DBC->createSequence($CC_CONFIG['smembTable']."_id_seq");
echo "done.\n";
} else {
@ -203,19 +190,26 @@ if (!camp_db_table_exists($CC_CONFIG['smembTable'])) {
if (!camp_db_table_exists($CC_CONFIG['permTable'])) {
echo " * Creating database table ".$CC_CONFIG['permTable']."...";
$CC_DBC->query("CREATE TABLE ".$CC_CONFIG['permTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['permTable']." (
permid int not null PRIMARY KEY,
subj int REFERENCES ".$CC_CONFIG['subjTable']." ON DELETE CASCADE,
action varchar(20),
obj int,
type char(1)
)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['permTable']."_permid_idx
ON ".$CC_CONFIG['permTable']." (permid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['permTable']."_subj_obj_idx
ON ".$CC_CONFIG['permTable']." (subj, obj)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['permTable']."_all_idx
ON ".$CC_CONFIG['permTable']." (subj, action, obj)");
type char(1))";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['permTable']."_permid_idx
ON ".$CC_CONFIG['permTable']." (permid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['permTable']."_subj_obj_idx
ON ".$CC_CONFIG['permTable']." (subj, obj)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['permTable']."_all_idx
ON ".$CC_CONFIG['permTable']." (subj, action, obj)";
camp_install_query($sql, false);
$CC_DBC->createSequence($CC_CONFIG['permTable']."_id_seq");
echo "done.\n";
} else {
@ -224,26 +218,52 @@ if (!camp_db_table_exists($CC_CONFIG['permTable'])) {
if (!camp_db_table_exists($CC_CONFIG['sessTable'])) {
echo " * Creating database table ".$CC_CONFIG['sessTable']."...";
$CC_DBC->query("CREATE TABLE ".$CC_CONFIG['sessTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['sessTable']." (
sessid char(32) not null PRIMARY KEY,
userid int REFERENCES ".$CC_CONFIG['subjTable']." ON DELETE CASCADE,
login varchar(255),
ts timestamp
)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['sessTable']."_sessid_idx
ON ".$CC_CONFIG['sessTable']." (sessid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['sessTable']."_userid_idx
ON ".$CC_CONFIG['sessTable']." (userid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['sessTable']."_login_idx
ON ".$CC_CONFIG['sessTable']." (login)");
echo "done.\n";
ts timestamp)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['sessTable']."_sessid_idx
ON ".$CC_CONFIG['sessTable']." (sessid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['sessTable']."_userid_idx
ON ".$CC_CONFIG['sessTable']." (userid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['sessTable']."_login_idx
ON ".$CC_CONFIG['sessTable']." (login)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['sessTable']."\n";
}
/**
* file states:
* <ul>
* <li>empty</li>
* <li>incomplete</li>
* <li>ready</li>
* <li>edited</li>
* <li>deleted</li>
* </ul>
* file types:
* <ul>
* <li>audioclip</li>
* <li>playlist</li>
* <li>webstream</li>
* </ul>
* access types:
* <ul>
* <li>access</li>
* <li>download</li>
* </ul>
*/
if (!camp_db_table_exists($CC_CONFIG['filesTable'])) {
echo " * Creating database table ".$CC_CONFIG['filesTable']."...";
$r = $CC_DBC->query("CREATE TABLE ".$CC_CONFIG['filesTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['filesTable']." (
id int not null,
gunid bigint not null, -- global unique ID
name varchar(255) not null default'', -- human file id ;)
@ -252,23 +272,47 @@ if (!camp_db_table_exists($CC_CONFIG['filesTable'])) {
state varchar(128) not null default'empty', -- file state
currentlyaccessing int not null default 0, -- access counter
editedby int REFERENCES ".$CC_CONFIG['subjTable'].", -- who edits it
mtime timestamp(6) with time zone -- lst modif.time
)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['filesTable']."_id_idx
ON ".$CC_CONFIG['filesTable']." (id)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['filesTable']."_gunid_idx
ON ".$CC_CONFIG['filesTable']." (gunid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['filesTable']."_name_idx
ON ".$CC_CONFIG['filesTable']." (name)");
echo "done.\n";
mtime timestamp(6) with time zone, -- lst modif.time
md5 char(32)
)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['filesTable']."_id_idx
ON ".$CC_CONFIG['filesTable']." (id)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['filesTable']."_gunid_idx
ON ".$CC_CONFIG['filesTable']." (gunid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['filesTable']."_name_idx
ON ".$CC_CONFIG['filesTable']." (name)";
camp_install_query($sql);
$sql = "CREATE INDEX ".$CC_CONFIG['filesTable']."_md5_idx
ON ls_files (md5)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['filesTable']."\n";
}
/**
* id subjns subject predns predicate objns object
* y1 literal xmbf NULL namespace literal http://www.sotf.org/xbmf
* x1 gunid <gunid> xbmf contributor NULL NULL
* x2 mdid x1 xbmf role literal Editor
*
* predefined shortcuts:
* _L = literal
* _G = gunid (global id of media file)
* _I = mdid (local id of metadata record)
* _nssshortcut = namespace shortcut definition
* _blank = blank node
*/
if (!camp_db_table_exists($CC_CONFIG['mdataTable'])) {
echo " * Creating database table ".$CC_CONFIG['mdataTable']."...";
$CC_DBC->createSequence($CC_CONFIG['mdataTable']."_id_seq");
$r = $CC_DBC->query("CREATE TABLE ".$CC_CONFIG['mdataTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['mdataTable']." (
id int not null,
gunid bigint,
subjns varchar(255), -- subject namespace shortcut/uri
@ -278,23 +322,31 @@ if (!camp_db_table_exists($CC_CONFIG['mdataTable'])) {
predxml char(1) not null default 'T', -- Tag or Attribute
objns varchar(255), -- object namespace shortcut/uri
object text
)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['mdataTable']."_id_idx
ON ".$CC_CONFIG['mdataTable']." (id)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['mdataTable']."_gunid_idx
ON ".$CC_CONFIG['mdataTable']." (gunid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['mdataTable']."_subj_idx
ON ".$CC_CONFIG['mdataTable']." (subjns, subject)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['mdataTable']."_pred_idx
ON ".$CC_CONFIG['mdataTable']." (predns, predicate)");
echo "done.\n";
)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['mdataTable']."_id_idx
ON ".$CC_CONFIG['mdataTable']." (id)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['mdataTable']."_gunid_idx
ON ".$CC_CONFIG['mdataTable']." (gunid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['mdataTable']."_subj_idx
ON ".$CC_CONFIG['mdataTable']." (subjns, subject)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['mdataTable']."_pred_idx
ON ".$CC_CONFIG['mdataTable']." (predns, predicate)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['mdataTable']."\n";
}
if (!camp_db_table_exists($CC_CONFIG['accessTable'])) {
echo " * Creating database table ".$CC_CONFIG['accessTable']."...";
$r = $CC_DBC->query("CREATE TABLE ".$CC_CONFIG['accessTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['accessTable']." (
gunid bigint, -- global unique id
token bigint, -- access token
chsum char(32) not null default'', -- md5 checksum
@ -303,14 +355,20 @@ if (!camp_db_table_exists($CC_CONFIG['accessTable'])) {
parent bigint, -- parent token
owner int REFERENCES ".$CC_CONFIG['subjTable'].", -- subject have started it
ts timestamp
)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['accessTable']."_token_idx
ON ".$CC_CONFIG['accessTable']." (token)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['accessTable']."_gunid_idx
ON ".$CC_CONFIG['accessTable']." (gunid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['accessTable']."_parent_idx
ON ".$CC_CONFIG['accessTable']." (parent)");
echo "done.\n";
)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['accessTable']."_token_idx
ON ".$CC_CONFIG['accessTable']." (token)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['accessTable']."_gunid_idx
ON ".$CC_CONFIG['accessTable']." (gunid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['accessTable']."_parent_idx
ON ".$CC_CONFIG['accessTable']." (parent)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['accessTable']."\n";
}
@ -326,7 +384,7 @@ $r = $gb->initData(true);
if (!camp_db_table_exists($CC_CONFIG['transTable'])) {
echo " * Creating database table ".$CC_CONFIG['transTable']."...";
$CC_DBC->query("CREATE TABLE ".$CC_CONFIG['transTable']." (
$sql = "CREATE TABLE ".$CC_CONFIG['transTable']." (
id int not null, -- primary key
trtok char(16) not null, -- transport token
direction varchar(128) not null, -- direction: up|down
@ -351,19 +409,29 @@ if (!camp_db_table_exists($CC_CONFIG['transTable'])) {
errmsg varchar(255), -- error message string for failed tr.
start timestamp, -- starttime
ts timestamp -- mtime
)");
)";
camp_install_query($sql, false);
$CC_DBC->createSequence($CC_CONFIG['transTable']."_id_seq");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_id_idx
ON ".$CC_CONFIG['transTable']." (id)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_trtok_idx
ON ".$CC_CONFIG['transTable']." (trtok)");
$CC_DBC->query("CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_token_idx
ON ".$CC_CONFIG['transTable']." (pdtoken)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['transTable']."_gunid_idx
ON ".$CC_CONFIG['transTable']." (gunid)");
$CC_DBC->query("CREATE INDEX ".$CC_CONFIG['transTable']."_state_idx
ON ".$CC_CONFIG['transTable']." (state)");
echo "done.\n";
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_id_idx
ON ".$CC_CONFIG['transTable']." (id)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_trtok_idx
ON ".$CC_CONFIG['transTable']." (trtok)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_token_idx
ON ".$CC_CONFIG['transTable']." (pdtoken)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['transTable']."_gunid_idx
ON ".$CC_CONFIG['transTable']." (gunid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['transTable']."_state_idx
ON ".$CC_CONFIG['transTable']." (state)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['transTable']."\n";
}