$this->name = trim($xmlarr['@']['NAME']);
} else {
$this->errormsg = 'Missing NAME attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
$this->type = $type;
} else {
$this->errormsg = 'Invalid TYPE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Missing TYPE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
$this->type == XMLDB_TYPE_CHAR) {
if (!(is_numeric($length)&&(intval($length)==floatval($length)))) {
$this->errormsg = 'Incorrect LENGTH attribute for int, number or char fields';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
} else if (!$length) {
$this->errormsg = 'Zero LENGTH attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$length != 'medium' &&
$length != 'small') {
$this->errormsg = 'Incorrect LENGTH attribute for text and binary fields (only big, medium and small allowed)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$this->unsigned = false;
} else {
$this->errormsg = 'Incorrect UNSIGNED attribute (true/false allowed)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$this->notnull = false;
} else {
$this->errormsg = 'Incorrect NOTNULL attribute (true/false allowed)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$this->sequence = false;
} else {
$this->errormsg = 'Incorrect SEQUENCE attribute (true/false allowed)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$this->enum = false;
} else {
$this->errormsg = 'Incorrect ENUM attribute (true/false allowed)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$enumvalues = strtolower(trim($xmlarr['@']['ENUMVALUES']));
if (!$this->enum) {
$this->errormsg = 'Wrong ENUMVALUES attribute (not ENUM)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
$this->enumvalues = $enumvalues;
} else {
if (substr($enumelement, 0, 1) != "'" ||
substr($enumelement, -1, 1) != "'") {
$this->errormsg = 'Incorrect ENUMVALUES attribute (some value is not properly quoted)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
} else {
$this->errormsg = 'Incorrect ENUMVALUES attribute (comma separated of quoted values)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
} else if ($this->enum) {
$this->errormsg = 'Incorrect ENUMVALUES attribute (field is not declared as ENUM)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Finally, set the value
$this->type == XMLDB_TYPE_FLOAT) {
if (!(is_numeric($decimals)&&(intval($decimals)==floatval($decimals)))) {
$this->errormsg = 'Incorrect DECIMALS attribute for number field';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
} else if ($this->length <= $decimals){
$this->errormsg = 'Incorrect DECIMALS attribute (bigget than length)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Incorrect DECIMALS attribute for non-number field';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->name = trim($xmlarr['@']['NAME']);
} else {
$this->errormsg = 'Missing NAME attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
$this->unique = false;
} else {
$this->errormsg = 'Incorrect UNIQUE attribute (true/false allowed)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Undefined UNIQUE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
} else {
$this->errormsg = 'Incorrect FIELDS attribute (comma separated of fields)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Empty FIELDS attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Missing FIELDS attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Finally, set the array of fields
$this->name = trim($xmlarr['@']['NAME']);
} else {
$this->errormsg = 'Missing NAME attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
$this->type = $type;
} else {
$this->errormsg = 'Invalid TYPE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Missing TYPE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
} else {
$this->errormsg = 'Incorrect FIELDS attribute (comma separated of fields)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Empty FIELDS attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Missing FIELDS attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Finally, set the array of fields
$reftable = strtolower(trim($xmlarr['@']['REFTABLE']));
if (!$reftable) {
$this->errormsg = 'Empty REFTABLE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Wrong REFTABLE attribute (only FK can have it)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else if ($this->type == XMLDB_KEY_FOREIGN ||
$this->type == XMLDB_KEY_FOREIGN_UNIQUE) {
$this->errormsg = 'Missing REFTABLE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Finally, set the reftable
}
} else {
$this->errormsg = 'Incorrect REFFIELDS attribute (comma separated of fields)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Empty REFFIELDS attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Wrong REFFIELDS attribute (only FK can have it)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else if ($this->type == XMLDB_KEY_FOREIGN ||
$this->type == XMLDB_KEY_FOREIGN_UNIQUE) {
$this->errormsg = 'Missing REFFIELDS attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Finally, set the array of reffields
return get_class($this);
}
+ /**
+ * This function will perform the central debug of all the XMLDB classes
+ * being called automatically every time one error is found. Apart from
+ * the main actions performed in it (XMLDB agnostic) it looks for one
+ * function called xmldb_debug() and invokes it, passing both the
+ * message code and the whole object.
+ * So, to perform custom debugging just add such function to your libs.
+ *
+ * Call to the external hook function can be disabled by request by
+ * defining XMLDB_SKIP_DEBUG_HOOK
+ */
+ function debug($message) {
+
+ /// Check for xmldb_debug($message, $xmldb_object)
+ $funcname = 'xmldb_debug';
+ /// If exists and XMLDB_SKIP_DEBUG_HOOK is undefined
+ if (function_exists($funcname) && !defined('XMLDB_SKIP_DEBUG_HOOK')) {
+ $funcname($message, $this);
+ }
+ }
+
/**
* Returns one array of elements from one comma separated string,
* supporting quoted strings containing commas and concat function calls
$this->table = strtolower(trim($xmlarr['@']['TABLE']));
} else {
$this->errormsg = 'Missing TABLE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
$this->type = $type;
} else {
$this->errormsg = 'Invalid TYPE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
} else {
$this->errormsg = 'Missing TYPE attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
$sentencesarr[] = trim($sentence['@']['TEXT']);
} else {
$this->errormsg = 'Missing TEXT attribute in sentence';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
/// Check that we aren't inserting the id field
if (in_array('id', $fields)) {
$this->errormsg = 'Cannot insert the "id" field. It is an autonumeric column';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
if ($result && count($fields) == 0) {
$this->errormsg = 'Missing fields in sentence "' . $sentence . '"';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
if ($result && count($values) == 0) {
$this->errormsg = 'Missing values in sentence "' . $sentence . '"';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
if ($result && count($fields) != count($values)) {
$this->errormsg = 'Incorrect number of fields (' .implode(', ', $fields) . ') or values (' . implode(', ', $values) . ')';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
} else {
/// Sentences different from INSERT are not valid for now
$this->errormsg = 'Only INSERT statements are supported';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
$this->path = trim($xmlarr['XMLDB']['@']['PATH']);
} else {
$this->errormsg = 'Missing PATH attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
if (isset($xmlarr['XMLDB']['@']['VERSION'])) {
$this->version = trim($xmlarr['XMLDB']['@']['VERSION']);
} else {
$this->errormsg = 'Missing VERSION attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
if (isset($xmlarr['XMLDB']['@']['COMMENT'])) {
$this->comment = trim($xmlarr['XMLDB']['@']['COMMENT']);
} else {
$this->errormsg = 'Missing COMMENT attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
$this->tables[] = $table;
if (!$table->isLoaded()) {
$this->errormsg = 'Problem loading table ' . $name;
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
} else {
$this->errormsg = 'Missing TABLES section';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Check tables names are ok (lowercase, a-z _-)
if (!$this->checkNameValues($this->tables)) {
$this->errormsg = 'Some TABLES name values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Check previous & next are ok (duplicates and existing tables)
if ($result && !$this->checkPreviousNextValues($this->tables)) {
$this->errormsg = 'Some TABLES previous/next values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Order tables
if ($result && !$this->orderTables($this->tables)) {
$this->errormsg = 'Error ordering the tables';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$this->statements[] = $statement;
if (!$statement->isLoaded()) {
$this->errormsg = 'Problem loading statement ' . $name;
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
/// Check statements names are ok (lowercase, a-z _-)
if (!$this->checkNameValues($this->statements)) {
$this->errormsg = 'Some STATEMENTS name values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Check previous & next are ok (duplicates and existing statements)
if ($result && !$this->checkPreviousNextValues($this->statements)) {
$this->errormsg = 'Some STATEMENTS previous/next values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Order statements
if ($result && !$this->orderStatements($this->statements)) {
$this->errormsg = 'Error ordering the statements';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$this->name = trim($xmlarr['@']['NAME']);
} else {
$this->errormsg = 'Missing NAME attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
if (isset($xmlarr['@']['COMMENT'])) {
$this->comment = trim($xmlarr['@']['COMMENT']);
} else {
$this->errormsg = 'Missing COMMENT attribute';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
if (isset($xmlarr['@']['PREVIOUS'])) {
$this->fields[] = $field;
if (!$field->isLoaded()) {
$this->errormsg = 'Problem loading field ' . $name;
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
} else {
$this->errormsg = 'Missing FIELDS section';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Check field names are ok (lowercase, a-z _-)
if (!$this->checkNameValues($this->fields)) {
$this->errormsg = 'Some FIELDS name values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Check previous & next are ok (duplicates and existing fields)
if ($result && !$this->checkPreviousNextValues($this->fields)) {
$this->errormsg = 'Some FIELDS previous/next values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Order fields
if ($result && !$this->orderFields($this->fields)) {
$this->errormsg = 'Error ordering the fields';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
$this->keys[] = $key;
if (!$key->isLoaded()) {
$this->errormsg = 'Problem loading key ' . $name;
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
} else {
$this->errormsg = 'Missing KEYS section (at least one PK must exist)';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Check keys names are ok (lowercase, a-z _-)
if (!$this->checkNameValues($this->keys)) {
$this->errormsg = 'Some KEYS name values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Check previous & next are ok (duplicates and existing keys)
if ($result && !$this->checkPreviousNextValues($this->keys)) {
$this->errormsg = 'Some KEYS previous/next values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Order keys
if ($result && !$this->orderKeys($this->keys)) {
$this->errormsg = 'Error ordering the keys';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// TODO: Only one PK
$this->indexes[] = $index;
if (!$index->isLoaded()) {
$this->errormsg = 'Problem loading index ' . $name;
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
}
/// Check field names are ok (lowercase, a-z _-)
if (!$this->checkNameValues($this->indexes)) {
$this->errormsg = 'Some INDEXES name values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Check previous & next are ok (duplicates and existing INDEXES)
if ($result && !$this->checkPreviousNextValues($this->indexes)) {
$this->errormsg = 'Some INDEXES previous/next values are incorrect';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// Order indexes
if ($result && !$this->orderIndexes($this->indexes)) {
$this->errormsg = 'Error ordering the indexes';
- xmldb_dbg($this->errormsg);
+ $this->debug($this->errormsg);
$result = false;
}
/// TODO: Not indexes with repeated fields