diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Utils/Error.php | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/Utils/Error.php b/src/Utils/Error.php new file mode 100644 index 0000000..c1bfee1 --- /dev/null +++ b/src/Utils/Error.php @@ -0,0 +1,94 @@ +<?php + +/** + * Error related utilities. + * + * @package SqlParser + * @subpackage Utils + */ +namespace SqlParser\Utils; + +use SqlParser\Lexer; +use SqlParser\Parser; + +/** + * Error related utilities. + * + * @category Exceptions + * @package SqlParser + * @subpackage Utils + * @author Dan Ungureanu <udan1107@gmail.com> + * @license http://opensource.org/licenses/GPL-2.0 GNU Public License + */ +class Error +{ + + /** + * Gets the errors of a lexer and a parser. + * + * @param array $objs + * + * @return array Each element of the array represents an error. + * `$err[0]` holds the error message. + * `$err[1]` holds the error code. + * `$err[2]` holds the string that caused the issue. + * `$err[3]` holds the position of the string. + * (i.e. `array($msg, $code, $str, $pos)`) + */ + public static function get($objs) + { + $ret = array(); + + foreach ($objs as $obj) { + if ($obj instanceof Lexer) { + foreach ($obj->errors as $err) { + $ret[] = array( + $err->getMessage(), + $err->getCode(), + $err->ch, + $err->pos + ); + } + } elseif ($obj instanceof Parser) { + foreach ($obj->errors as $err) { + $ret[] = array( + $err->getMessage(), + $err->getCode(), + $err->token->token, + $err->token->position + ); + } + } + } + + return $ret; + } + + /** + * Formats the specified errors + * + * @param array $errors The errors to be formatted. + * @param string $format The format of an error. + * '$1$d' is replaced by the position of this error. + * '$2$s' is replaced by the error message. + * '$3$d' is replaced by the error code. + * '$4$s' is replaced by the string that caused the + * issue. + * '$5$d' is replaced by the position of the string. + * @return array + */ + public static function format( + $errors, $format = '#%1$d: %2$s (near "%4$s" at position %5$d)' + ) { + $ret = array(); + + $i = 0; + foreach ($errors as $key => $err) { + $ret[$key] = sprintf( + $format, ++$i, $err[0], $err[1], $err[2], $err[3] + ); + } + + return $ret; + } +} |