1<?php 2/** 3 * CreateProcessor.php 4 * 5 * This file implements the processor for the CREATE statements. 6 * 7 * PHP version 5 8 * 9 * LICENSE: 10 * Copyright (c) 2010-2014 Justin Swanhart and André Rothe 11 * All rights reserved. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions 15 * are met: 16 * 1. Redistributions of source code must retain the above copyright 17 * notice, this list of conditions and the following disclaimer. 18 * 2. Redistributions in binary form must reproduce the above copyright 19 * notice, this list of conditions and the following disclaimer in the 20 * documentation and/or other materials provided with the distribution. 21 * 3. The name of the author may not be used to endorse or promote products 22 * derived from this software without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 25 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 26 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 27 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 29 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 * 35 * @author André Rothe <andre.rothe@phosco.info> 36 * @copyright 2010-2014 Justin Swanhart and André Rothe 37 * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) 38 * @version SVN: $Id$ 39 * 40 */ 41 42namespace PHPSQLParser\processors; 43use PHPSQLParser\utils\ExpressionType; 44 45/** 46 * This class processes the CREATE statements. 47 * 48 * @author André Rothe <andre.rothe@phosco.info> 49 * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) 50 * 51 */ 52class CreateProcessor extends AbstractProcessor { 53 54 public function process($tokens) { 55 $result = $expr = array(); 56 $base_expr = ""; 57 58 foreach ($tokens as $token) { 59 60 $trim = trim($token); 61 $base_expr .= $token; 62 63 if ($trim === "") { 64 continue; 65 } 66 67 $upper = strtoupper($trim); 68 switch ($upper) { 69 70 case 'TEMPORARY': 71 // CREATE TEMPORARY TABLE 72 $result['expr_type'] = ExpressionType::TEMPORARY_TABLE; 73 $result['not-exists'] = false; 74 $expr[] = array('expr_type' => ExpressionType::RESERVED, 'base_expr' => $trim); 75 break; 76 77 case 'TABLE': 78 // CREATE TABLE 79 $result['expr_type'] = ExpressionType::TABLE; 80 $result['not-exists'] = false; 81 $expr[] = array('expr_type' => ExpressionType::RESERVED, 'base_expr' => $trim); 82 break; 83 84 case 'INDEX': 85 // CREATE INDEX 86 $result['expr_type'] = ExpressionType::INDEX; 87 $expr[] = array('expr_type' => ExpressionType::RESERVED, 'base_expr' => $trim); 88 break; 89 90 case 'UNIQUE': 91 case 'FULLTEXT': 92 case 'SPATIAL': 93 // options of CREATE INDEX 94 $result['base_expr'] = $result['expr_type'] = false; 95 $result['constraint'] = $upper; 96 $expr[] = array('expr_type' => ExpressionType::RESERVED, 'base_expr' => $trim); 97 break; 98 99 case 'IF': 100 // option of CREATE TABLE 101 $expr[] = array('expr_type' => ExpressionType::RESERVED, 'base_expr' => $trim); 102 break; 103 104 case 'NOT': 105 // option of CREATE TABLE 106 $expr[] = array('expr_type' => ExpressionType::RESERVED, 'base_expr' => $trim); 107 break; 108 109 case 'EXISTS': 110 // option of CREATE TABLE 111 $result['not-exists'] = true; 112 $expr[] = array('expr_type' => ExpressionType::RESERVED, 'base_expr' => $trim); 113 break; 114 115 default: 116 break; 117 } 118 } 119 $result['base_expr'] = trim($base_expr); 120 $result['sub_tree'] = $expr; 121 return $result; 122 } 123} 124?>