aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/sql_parse.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/sql_parse.php')
-rw-r--r--phpBB/includes/sql_parse.php115
1 files changed, 115 insertions, 0 deletions
diff --git a/phpBB/includes/sql_parse.php b/phpBB/includes/sql_parse.php
new file mode 100644
index 0000000000..cc94437762
--- /dev/null
+++ b/phpBB/includes/sql_parse.php
@@ -0,0 +1,115 @@
+<?php
+/***************************************************************************
+* sql_parse.php
+* -------------------
+* begin : Thu May 31, 2001
+* copyright : (C) 2001 The phpBB Group
+* email : support@phpbb.com
+*
+* $Id$
+*
+****************************************************************************/
+
+/***************************************************************************
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ ***************************************************************************/
+
+/***************************************************************************
+*
+* These functions are mainly for use in the db_utilities under the admin
+* however in order to make these functions available elsewhere, specifically
+* in the installation phase of phpBB I have seperated out a couple of
+* functions into this file. JLH
+*
+\***************************************************************************/
+
+//
+// remove_remarks will strip the sql comment lines out of an uploaded sql file
+//
+function remove_remarks($sql)
+{
+ $lines = explode("\n", $sql);
+
+ // try to keep mem. use down
+ $sql = "";
+
+ $linecount = count($lines);
+ $output = "";
+
+ for ($i = 0; $i < $linecount; $i++)
+ {
+ if (($i != ($linecount - 1)) || (strlen($lines[$i]) > 0))
+ {
+ if ($lines[$i][0] != "#")
+ {
+ $output .= $lines[$i] . "\n";
+ }
+ else
+ {
+ $output .= "\n";
+ }
+ // Trading a bit of speed for lower mem. use here.
+ $lines[$i] = "";
+ }
+ }
+
+ return $output;
+
+}
+
+//
+// split_sql_file will split an uploaded sql file into single sql statements.
+// Note: expects trim() to have already been run on $sql.
+//
+function split_sql_file($sql, $delimiter)
+{
+ // Split up our string into "possible" SQL statements.
+ $tokens = explode($delimiter, $sql);
+ // try to save memory.
+ $sql = "";
+ $output = array();
+
+ // we don't actually care about the matches preg gives us.
+ $matches = array();
+
+ // this is faster than calling count($oktens) every time thru the loop.
+ $token_count = count($tokens);
+ for ($i = 0; $i < $token_count; $i++)
+ {
+ // Don't wanna add an empty string as the last thing in the array.
+ if (($i != ($token_count - 1)) || (strlen($tokens[$i] > 0)))
+ {
+ // This is the total number of single quotes in the token.
+ $total_quotes = preg_match_all("/'/", $tokens[$i], $matches);
+ // Counts single quotes that are preceded by an odd number of backslashes,
+ // which means they're escaped quotes.
+ $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$i], $matches);
+
+ $unescaped_quotes = $total_quotes - $escaped_quotes;
+
+ // If the number of unescaped quotes is even, then the delimiter did NOT occur inside a string literal.
+ if (($unescaped_quotes % 2) == 0)
+ {
+ // It's a complete sql statement.
+ $output[] = $tokens[$i];
+ // save memory.
+ $tokens[$i] = "";
+ }
+ else
+ {
+ // it's not complete, so prepend it onto the next token and continue the loop as usual.
+ $tokens[$i + 1] = $tokens[$i] . ";" . $tokens[$i + 1];
+ // save memory.
+ $tokens[$i] = "";
+ }
+ }
+ }
+
+ return $output;
+}
+?>