Open Monograph Press  3.3.0
XmlToSqlTool.inc.php
1 <?php
2 
17 import('lib.pkp.classes.db.DBDataXMLParser');
18 
20 
22  var $type;
23 
25  var $command;
26 
28  var $inputFile;
29 
32 
38  function __construct($argv = array()) {
39  parent::__construct($argv);
40 
41  if (isset($this->argv[0]) && in_array($this->argv[0], array('-schema', '-data'))) {
42  $this->type = substr($this->argv[0], 1);
43  $argOffset = 1;
44  } else {
45  $this->type = 'schema';
46  $argOffset = 0;
47  }
48 
49  if (!isset($this->argv[$argOffset]) || !in_array($this->argv[$argOffset], array('print', 'save', 'print_upgrade', 'save_upgrade', 'execute'))) {
50  $this->usage();
51  exit(1);
52  }
53 
54  $this->command = $this->argv[$argOffset];
55 
56  $file = isset($this->argv[$argOffset+1]) ? $this->argv[$argOffset+1] : DATABASE_XML_FILE;
57 
58  if (!file_exists($file) && !file_exists(($file2 = PWD . '/' . $file))) {
59  printf("Input file \"%s\" does not exist!\n", $file);
60  exit(1);
61  }
62 
63  $this->inputFile = isset($file2) ? $file2 : $file;
64 
65  $this->outputFile = isset($this->argv[$argOffset+2]) ? PWD . '/' . $this->argv[$argOffset+2] : null;
66  if (in_array($this->command, array('save', 'save_upgrade')) && ($this->outputFile == null || (file_exists($this->outputFile) && (is_dir($this->outputFile) || !is_writeable($this->outputFile))) || !is_writable(dirname($this->outputFile)))) {
67  printf("Invalid output file \"%s\"!\n", $this->outputFile);
68  exit(1);
69  }
70  }
71 
75  function usage() {
76  echo "Script to convert and execute XML-formatted database schema and data files\n"
77  . "Usage: {$this->scriptName} [-data|-schema] command [input_file] [output_file]\n"
78  . "Supported commands:\n"
79  . " print - print SQL statements\n"
80  . " save - save SQL statements to output_file\n"
81  . " print_upgrade - print upgrade SQL statements for current database\n"
82  . " save_upgrade - save upgrade SQL statements to output_file\n"
83  . " execute - execute SQL statements on current database\n";
84  }
85 
90  function execute() {
91  require_once('./lib/pkp/lib/vendor/adodb/adodb-php/adodb-xmlschema.inc.php');
92 
93  if (in_array($this->command, array('print', 'save'))) {
94  // Don't connect to actual database (so parser won't build upgrade XML)
95  $conn = new DBConnection(
96  Config::getVar('database', 'driver'),
97  null,
98  null,
99  null,
100  null,
101  true,
102  Config::getVar('i18n', 'connection_charset')
103  );
104  $dbconn = $conn->getDBConn();
105 
106  } else {
107  // Create or upgrade existing database
108  $dbconn =& DBConnection::getConn();
109  }
110 
111  $schema = new adoSchema($dbconn);
112  $dict =& $schema->dict;
113 
114  if ($this->type == 'schema') {
115  // Parse XML schema files
116  $sql = $schema->parseSchema($this->inputFile);
117 
118  switch ($this->command) {
119  case 'execute':
120  $schema->ExecuteSchema();
121  break;
122  case 'save':
123  case 'save_upgrade':
124  $schema->SaveSQL($this->outputFile);
125  break;
126  case 'print':
127  case 'print_upgrade':
128  default:
129  echo @$schema->PrintSQL('TEXT') . "\n";
130  break;
131  }
132 
133  } else if ($this->type == 'data') {
134  // Parse XML data files
135  $dataXMLParser = new DBDataXMLParser();
136  $dataXMLParser->setDBConn($dbconn);
137  $sql = $dataXMLParser->parseData($this->inputFile);
138 
139  switch ($this->command) {
140  case 'execute':
141  $schema->addSQL($sql);
142  $schema->ExecuteSchema();
143  break;
144  case 'save':
145  case 'save_upgrade':
146  $schema->addSQL($sql);
147  $schema->SaveSQL($this->outputFile);
148  break;
149  case 'print':
150  case 'print_upgrade':
151  default:
152  $schema->addSQL($sql);
153  echo @$schema->PrintSQL('TEXT') . "\n";
154  break;
155  }
156  }
157  }
158 }
159 
160 
XmlToSqlTool\$command
$command
Definition: XmlToSqlTool.inc.php:31
DBConnection
Class for accessing the low-level database connection. Currently integrated with ADOdb (from http://a...
Definition: DBConnection.inc.php:19
XmlToSqlTool\$type
$type
Definition: XmlToSqlTool.inc.php:25
CommandLineTool
Initialization code for command-line scripts.
Definition: CliTool.inc.php:44
XmlToSqlTool\__construct
__construct($argv=array())
Definition: XmlToSqlTool.inc.php:50
XmlToSqlTool\$inputFile
$inputFile
Definition: XmlToSqlTool.inc.php:37
XmlToSqlTool\$outputFile
$outputFile
Definition: XmlToSqlTool.inc.php:43
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
DBDataXMLParser
Class to import and export database data from an XML format. See dbscripts/xml/dtd/xmldata....
Definition: DBDataXMLParser.inc.php:20
DBConnection\getConn
static & getConn()
Definition: DBConnection.inc.php:257
XmlToSqlTool\usage
usage()
Definition: XmlToSqlTool.inc.php:87
CommandLineTool\$argv
$argv
Definition: CliTool.inc.php:53
XmlToSqlTool\execute
execute()
Definition: XmlToSqlTool.inc.php:102
XmlToSqlTool
CLI tool to output the SQL statements corresponding to an XML database schema.
Definition: XmlToSqlTool.inc.php:19