| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 | <?php/** * Define SQL for SQL Server database system * @author valentin carruesco * @category Core * @license MIT */class SqlServer{	const label = 'SQLServer';	const connection = 'sqlsrv:Server={{host}};Database={{name}}';	const description = 'Base microsoft SQL Server authentifiée';	const table_escape = '"';	const column_escape = '"';	public static function pdo_attributes(){		return array(			PDO::ATTR_PERSISTENT => true,			PDO::ATTR_ERRMODE=> PDO::ERRMODE_EXCEPTION		);	}	public static function fields(){		return array(			array('id'=>'host','label'=>'Serveur','default'=>'localhost','comment'=>''),			array('id'=>'login','label'=>'Identifiant','default'=>'','comment'=>''),			array('id'=>'password','label'=>'Mot de passe','default'=>'','comment'=>''),			array('id'=>'name','label'=>'Nom de la base','default'=>'','comment'=>'')		);	}	public static function operators($key=null){		$operators =  		array(				'in'=> array(						'slug'=> 'in',						'label'=>'Contient une des valeurs',						'sql'=>function($column,$values,&$query,&$data){							$places = array();							foreach ($values as $value) {								$places[] = '?';								$data[] = $value;							}						    $query .= $column.' IN ('. implode(',',$places).')';						}),				'not in'=> array(						'slug'=> 'not in',						'label'=>'Ne contient aucune des valeurs',						'sql'=>function($column,$values,&$query,&$data){						$places = array();						foreach ($values as $value) {							$places[] = '?';							$data[] = $value;						}					    $query .= $column.' NOT IN ('. implode(',',$places).')';				}),				'null'=> array(						'slug'=> 'null',						'label'=>'Non renseigné',						'sql'=>'{{column}} IS NULL'					),				'not null'=> array(						'slug'=> 'not null',						'label'=>'Renseigné',						'sql'=>'{{column}} IS NOT NULL'					),				'like'=> array(						'slug'=> 'like',						'label'=>'Contient',						'sql'=>function($column,$values,&$query,&$data){											$data[] = '%'.$values[0].'%';							$query .= ' '.$column.' LIKE ?' ;						}					),				'not like'=> array(						'slug'=> 'not like',						'label'=>'Ne contient pas',						'sql'=>function($column,$values,&$query,&$data){											$data[] = '%'.$values[0].'%';							$query .= ' '.$column.' NOT LIKE ?' ;						}					),				'='=> array(						'slug'=> '=',						'label'=>'Egal',						'sql'=>'{{column}} = {{value}}'					),				'!='=> array(						'slug'=> '!=',						'label'=>'Différent',						'sql'=>'{{column}} != {{value}}'					),				'<'=> array(						'slug'=> '<',						'label'=>'Inférieur',						'sql'=>'{{column}} < {{value}}'					),				'>'=> array(						'slug'=> '>',						'label'=>'Supérieur',						'sql'=>'{{column}} > {{value}}'					),				'between'=> array(						'slug'=> 'between',						'label'=>'Entre',						'values' => 2,						'sql'=>function($column,$values,&$query,&$data){							$query .= ' '.$column.' between ? AND ? ' ;							$data[] = $values[0];							$data[] = $values[1];						}					),				'inline-or'=> array(						'slug'=> 'inline-or',						'label'=>'Contient une des valeurs',						'sql'=>function($column,$values,&$query,&$data){					$values = explode(',', $values[0]);					$query .= ' ( ';					foreach($values as $i=>$value){						$query .= ' '.($i!=0?' OR ':'  ').$column.' LIKE ? ';						$data[] =  '%,'.$value.',%';					}					$query .= ' ) ';				}),				'inline-and'=> array(						'slug'=> 'inline-and',						'label'=>'Contient toutes les valeurs',						'sql'=>function($column,$values,&$query,&$data){							$values = explode(',', $values[0]);							$query .= ' ( ';							foreach($values as $i=>$value){								$query .= ' '.($i!=0?' AND ':'  ').$column.' LIKE ? ';								$data[] =  '%,'.$value.',%';							}					$query .= ' ) ';				})					);		if(!isset($key)) return $operators;		return isset($operators[$key]) ?$operators[$key] : array('label'=>'Non définit','sql'=>'');	}	public static function processField(&$field,&$value,&$values,&$i){		if($field['operator'] == 'BETWEEN' || $field['operator'] == 'NOT BETWEEN'){			foreach ($value as $v2) {                $tag = ':'.$i;                $field['tag'][]= $tag;                $values[$tag] = $v2;                $i++;            }            $field['tag'] = implode(' AND ',$field['tag']);		}else if($field['operator'] == 'IN' || $field['operator'] == 'NOT IN'){            $field['tag'] = array();             $valueArray = !is_array($value)?explode(',',$value) : $value;            foreach ($valueArray as $v2) {                $tag = ':'.$i;                $field['tag'][]= $tag;                $values[$tag] = $v2;                $i++;            }            $field['tag'] = implode(',',$field['tag']);            $field['operator'] = $field['operator'].'(';            $field['postoperator'] = ')';        }else if(is_null($value)){        	$field['operator'] = ' IS'.($field['operator']=='!=' ? ' NOT ':' ').'NULL ';        	$field['tag'] = '';        }else{            $tag = ':'.$i;            $field['tag'] = $tag;            $values[$tag] = $value;            $i++;        }	}	public static function types(){		$types = array();		$types['string']  = 'VARCHAR(225) CHARACTER SET utf8 COLLATE utf8_general_ci';		$types['longstring'] = 'TEXT CHARACTER SET utf8 COLLATE utf8_general_ci';		$types['key'] = 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY';		$types['object'] = $types['timestamp'] = $types['datetime'] = $types['date'] = $types['int'] = 'INT(11)';		$types['boolean'] = 'tinyint(1) NOT NULL DEFAULT \'0\'';		$types['blob'] = ' BLOB';		$types['float'] = 'FLOAT';		$types['decimal'] = 'DECIMAL(20,2)';		$types['default'] = 'TEXT CHARACTER SET utf8 COLLATE utf8_general_ci';		return $types;	}	public static function beforeTransaction($pdo){		$pdo->exec("set names utf8");	}		public static function select(){		$sql = 'SELECT {{:selected}}{{value}}{{;}},{{/;}}{{/:selected}} FROM "{{table}}" {{?joins}}{{:joins}}LEFT JOIN "{{jointable2}}" {{jointableAlias}} ON "{{jointable1}}".{{field1}}= {{jointableAlias}}.{{field2}} {{/:joins}}{{/?joins}} {{?filter}} WHERE {{:filter}} "{{table}}"."{{key}}" {{operator}} {{value}} {{postoperator}} {{;}} AND {{/;}} {{/:filter}} {{/?filter}} {{?orderby}}ORDER BY {{:orderby}}{{value}}{{;}},{{/;}}{{/:orderby}} {{/?orderby}} {{?limit}}LIMIT {{:limit}}{{value}}{{;}},{{/;}}{{/:limit}}{{/?limit}}';		return $sql;	}	public static function delete(){		$sql = 'DELETE FROM "{{table}}" {{?filter}}WHERE {{:filter}}"{{key}}"{{operator}}{{value}} {{;}} AND {{/;}} {{/:filter}} {{/?filter}} {{?limit}}LIMIT {{:limit}}{{value}}{{;}},{{/;}}{{/:limit}}{{/?limit}}';		return $sql;	}	public static function count(){		$sql = 'SELECT COUNT({{selected}}) number FROM "{{table}}" {{?filter}}WHERE {{:filter}}"{{key}}"{{operator}}{{value}}{{postoperator}} {{;}} AND {{/;}} {{/:filter}} {{/?filter}}';		return $sql;	}	public static function update(){		$sql = 'UPDATE "{{table}}" SET {{?fields}} {{:fields}}"{{key}}"={{value}} {{;}} , {{/;}} {{/:fields}} {{/?fields}} {{?filter}} WHERE {{:filter}} "{{table}}"."{{key}}" {{operator}} {{value}} {{postoperator}} {{;}} AND {{/;}} {{/:filter}} {{/?filter}} {{/?filters}}';		return $sql;	}	public static function insert_head(){		$sql = 'INSERT INTO  "{{table}}" ({{?fields}} {{:fields}}"{{key}}" {{;}} , {{/;}} {{/:fields}} {{/?fields}})VALUES';		return $sql;	}	public static function insert_body(){		$sql = '({{?fields}} {{:fields}}{{value}} {{;}} , {{/;}} {{/:fields}} {{/?fields}})';		return $sql;	}	public static function insert(){		$sql = self::insert_head().self::insert_body();		return $sql;	}	public static function create(){		$sql = 'CREATE TABLE IF NOT EXISTS "{{table}}" ({{?fields}} {{:fields}}"{{key}}" {{value}}{{;}} , {{/;}} {{/:fields}} {{/?fields}}) DEFAULT CHARSET=utf8;';		return $sql;	}	public static function drop(){		$sql = 'DROP TABLE IF EXISTS "{{table}}";';		return $sql;	}	public static function truncate(){		$sql = 'TRUNCATE TABLE "{{table}}";';		return $sql;	}	public static function create_index(){		$sql = 'CREATE INDEX "{{index_name}}" ON "{{table}}" ({{column}})';		return $sql;	}	public static function drop_index(){		$sql = 'DROP INDEX "{{index_name}}" ON "{{table}}"';		return $sql;	}	public static function count_index(){		$sql = "SELECT COUNT(1) \"exists\" FROM INFORMATION_SCHEMA.STATISTICS		WHERE table_schema=DATABASE() AND table_name='{{table}}' AND index_name='{{index_name}}'";		return $sql;	}	public static function show_tables(){		$sql = 'SELECT sobjects.name FROM sysobjects sobjects WHERE sobjects.xtype = \'U\'';		return $sql;	}	public static function show_columns(){	  $sql = "select * from information_schema.columns where table_name = '{{table}}'";	  return $sql;	}	}?>
 |