<?php
							 | 
						|
								/** 
							 | 
						|
								* @package	uForum 
							 | 
						|
								* @file		includes/sql_parse.php
							 | 
						|
								* @version	$Id$ 
							 | 
						|
								* @copyright	2009(c) PioDer <[email protected]>
							 | 
						|
								* @link 	http://pioder.gim2przemysl.int.pl/
							 | 
						|
								* @license	GNU GPL v3
							 | 
						|
								* @note		Originally, phpMyAdmin function
							 | 
						|
								**/
							 | 
						|
								function remove_comments(&$output)
							 | 
						|
								{
							 | 
						|
									$lines = explode("\n", $output);
							 | 
						|
									$output = "";
							 | 
						|
									$linecount = count($lines);
							 | 
						|
									$in_comment = false;
							 | 
						|
									for($i = 0; $i < $linecount; $i++)
							 | 
						|
									{
							 | 
						|
										if( preg_match("/^\/\*/", preg_quote($lines[$i])) )
							 | 
						|
										{
							 | 
						|
											$in_comment = true;
							 | 
						|
										}
							 | 
						|
										if( !$in_comment )
							 | 
						|
										{
							 | 
						|
											$output .= $lines[$i] . "\n";
							 | 
						|
										}
							 | 
						|
										if( preg_match("/\*\/$/", preg_quote($lines[$i])) )
							 | 
						|
										{
							 | 
						|
											$in_comment = false;
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									unset($lines);
							 | 
						|
									return $output;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function remove_remarks($sql)
							 | 
						|
								{
							 | 
						|
									$lines = explode("\n", $sql);
							 | 
						|
									$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";
							 | 
						|
											}
							 | 
						|
											$lines[$i] = "";
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									return $output;	
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function split_sql_file($sql)
							 | 
						|
								{
							 | 
						|
									$delimiter = ';';
							 | 
						|
									$tokens = explode($delimiter, $sql);
							 | 
						|
									$sql = "";
							 | 
						|
									$output = array();
							 | 
						|
									$matches = array();
							 | 
						|
									$token_count = count($tokens);
							 | 
						|
									for ($i = 0; $i < $token_count; $i++)
							 | 
						|
									{
							 | 
						|
										if (($i != ($token_count - 1)) || (strlen($tokens[$i] > 0)))
							 | 
						|
										{
							 | 
						|
											$total_quotes = preg_match_all("/'/", $tokens[$i], $matches);
							 | 
						|
											$escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$i], $matches);
							 | 
						|
											$unescaped_quotes = $total_quotes - $escaped_quotes;			
							 | 
						|
											if (($unescaped_quotes % 2) == 0)
							 | 
						|
											{
							 | 
						|
												$output[] = $tokens[$i];
							 | 
						|
												$tokens[$i] = "";
							 | 
						|
											}
							 | 
						|
											else
							 | 
						|
											{
							 | 
						|
												$temp = $tokens[$i] . $delimiter;
							 | 
						|
												$tokens[$i] = ""; 
							 | 
						|
												$complete_stmt = false;
							 | 
						|
												for ($j = $i + 1; (!$complete_stmt && ($j < $token_count)); $j++)
							 | 
						|
												{
							 | 
						|
													$total_quotes = preg_match_all("/'/", $tokens[$j], $matches);
							 | 
						|
													$escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$j], $matches);
							 | 
						|
													$unescaped_quotes = $total_quotes - $escaped_quotes;
							 | 
						|
													if (($unescaped_quotes % 2) == 1)
							 | 
						|
													{
							 | 
						|
														$output[] = $temp . $tokens[$j];
							 | 
						|
														$tokens[$j] = "";
							 | 
						|
														$temp = "";
							 | 
						|
														$complete_stmt = true;
							 | 
						|
														$i = $j;
							 | 
						|
													}
							 | 
						|
													else
							 | 
						|
													{
							 | 
						|
														$temp .= $tokens[$j] . $delimiter;
							 | 
						|
														$tokens[$j] = "";
							 | 
						|
													}
							 | 
						|
													
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									return $output;
							 | 
						|
								}
							 | 
						|
								?>
							 |