diff --git a/src/main/java/com/alibaba/druid/sql/ast/SQLDataTypeImpl.java b/src/main/java/com/alibaba/druid/sql/ast/SQLDataTypeImpl.java index 646d1a4c0d..59e36cc897 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/SQLDataTypeImpl.java +++ b/src/main/java/com/alibaba/druid/sql/ast/SQLDataTypeImpl.java @@ -32,6 +32,9 @@ public class SQLDataTypeImpl extends SQLObjectImpl implements SQLDataType { private boolean withLocalTimeZone = false; private String dbType; + private boolean unsigned; + private boolean zerofill; + public SQLDataTypeImpl(){ } @@ -149,9 +152,27 @@ public class SQLDataTypeImpl extends SQLObjectImpl implements SQLDataType { x.withTimeZone = withTimeZone; x.withLocalTimeZone = withLocalTimeZone; + x.zerofill = zerofill; + x.unsigned = unsigned; } public String toString() { return SQLUtils.toSQLString(this, dbType); } + + public boolean isUnsigned() { + return unsigned; + } + + public void setUnsigned(boolean unsigned) { + this.unsigned = unsigned; + } + + public boolean isZerofill() { + return zerofill; + } + + public void setZerofill(boolean zerofill) { + this.zerofill = zerofill; + } } diff --git a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAnyExpr.java b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAnyExpr.java index d2fd994a86..5aebf143af 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAnyExpr.java +++ b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAnyExpr.java @@ -50,11 +50,11 @@ public class SQLAnyExpr extends SQLExprImpl { return this.subQuery; } - public void setSubQuery(SQLSelect subQuery) { - if (subQuery != null) { - subQuery.setParent(this); + public void setSubQuery(SQLSelect x) { + if (x != null) { + x.setParent(this); } - this.subQuery = subQuery; + this.subQuery = x; } public void output(StringBuffer buf) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableCharacter.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterCharacter.java similarity index 83% rename from src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableCharacter.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterCharacter.java index 23543694ff..42890ed11c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableCharacter.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterCharacter.java @@ -13,20 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.mysql.ast.statement; +package com.alibaba.druid.sql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLObjectImpl; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class MySqlAlterTableCharacter extends MySqlObjectImpl implements SQLAlterTableItem { +public class SQLAlterCharacter extends SQLObjectImpl implements SQLAlterTableItem { private SQLExpr characterSet; private SQLExpr collate; - @Override - public void accept0(MySqlASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, characterSet); acceptChild(visitor, collate); diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterDatabaseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterDatabaseStatement.java index 72c9c5e899..ac0b307772 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterDatabaseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterDatabaseStatement.java @@ -28,6 +28,8 @@ public class SQLAlterDatabaseStatement extends SQLStatementImpl implements SQLAl private SQLName name; private boolean upgradeDataDirectoryName; + + private SQLAlterCharacter character; public SQLAlterDatabaseStatement() { @@ -48,6 +50,17 @@ public class SQLAlterDatabaseStatement extends SQLStatementImpl implements SQLAl this.name = name; } + public SQLAlterCharacter getCharacter() { + return character; + } + + public void setCharacter(SQLAlterCharacter character) { + if (character != null) { + character.setParent(this); + } + this.character = character; + } + public boolean isUpgradeDataDirectoryName() { return upgradeDataDirectoryName; } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterFunctionStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterFunctionStatement.java index 9b088e5898..f855c5c949 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterFunctionStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterFunctionStatement.java @@ -15,6 +15,7 @@ */ package com.alibaba.druid.sql.ast.statement; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -25,6 +26,11 @@ public class SQLAlterFunctionStatement extends SQLStatementImpl { private boolean debug; private boolean reuseSettings; + private SQLExpr comment; + private boolean languageSql; + private boolean containsSql; + private SQLExpr sqlSecurity; + public boolean isDebug() { return debug; } @@ -44,6 +50,17 @@ public class SQLAlterFunctionStatement extends SQLStatementImpl { this.name = name; } + public SQLExpr getComment() { + return comment; + } + + public void setComment(SQLExpr comment) { + if (comment != null) { + comment.setParent(this); + } + this.comment = comment; + } + public boolean isReuseSettings() { return reuseSettings; } @@ -52,10 +69,39 @@ public class SQLAlterFunctionStatement extends SQLStatementImpl { this.reuseSettings = x; } + public boolean isLanguageSql() { + return languageSql; + } + + public void setLanguageSql(boolean languageSql) { + this.languageSql = languageSql; + } + + public boolean isContainsSql() { + return containsSql; + } + + public void setContainsSql(boolean containsSql) { + this.containsSql = containsSql; + } + + public SQLExpr getSqlSecurity() { + return sqlSecurity; + } + + public void setSqlSecurity(SQLExpr sqlSecurity) { + if (sqlSecurity != null) { + sqlSecurity.setParent(this); + } + this.sqlSecurity = sqlSecurity; + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, name); + acceptChild(visitor, comment); + acceptChild(visitor, sqlSecurity); } visitor.endVisit(this); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterProcedureStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterProcedureStatement.java new file mode 100644 index 0000000000..8a012d08e6 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterProcedureStatement.java @@ -0,0 +1,105 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleStatementImpl; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class SQLAlterProcedureStatement extends SQLStatementImpl implements SQLAlterStatement { + + private SQLExpr name; + + private boolean compile = false; + private boolean reuseSettings = false; + + private SQLExpr comment; + private boolean languageSql; + private boolean containsSql; + private SQLExpr sqlSecurity; + + public void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public SQLExpr getName() { + return name; + } + + public void setName(SQLExpr name) { + this.name = name; + } + + public boolean isCompile() { + return compile; + } + + public void setCompile(boolean compile) { + this.compile = compile; + } + + public boolean isReuseSettings() { + return reuseSettings; + } + + public void setReuseSettings(boolean reuseSettings) { + this.reuseSettings = reuseSettings; + } + + public boolean isLanguageSql() { + return languageSql; + } + + public void setLanguageSql(boolean languageSql) { + this.languageSql = languageSql; + } + + public boolean isContainsSql() { + return containsSql; + } + + public void setContainsSql(boolean containsSql) { + this.containsSql = containsSql; + } + + public SQLExpr getSqlSecurity() { + return sqlSecurity; + } + + public void setSqlSecurity(SQLExpr sqlSecurity) { + if (sqlSecurity != null) { + sqlSecurity.setParent(this); + } + this.sqlSecurity = sqlSecurity; + } + + public SQLExpr getComment() { + return comment; + } + + public void setComment(SQLExpr comment) { + if (comment != null) { + comment.setParent(this); + } + this.comment = comment; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddIndex.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddIndex.java index c0fa6ef9c7..72e6ff62f2 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddIndex.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddIndex.java @@ -18,6 +18,7 @@ package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObjectImpl; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; @@ -39,6 +40,8 @@ public class SQLAlterTableAddIndex extends SQLObjectImpl implements SQLAlterTabl private boolean key = false; + protected SQLExpr comment; + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { @@ -122,4 +125,15 @@ public class SQLAlterTableAddIndex extends SQLObjectImpl implements SQLAlterTabl } x.setIndexType(type); } + + public SQLExpr getComment() { + return comment; + } + + public void setComment(SQLExpr comment) { + if (comment != null) { + comment.setParent(this); + } + this.comment = comment; + } } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterViewStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterViewStatement.java new file mode 100644 index 0000000000..507c1e03d6 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterViewStatement.java @@ -0,0 +1,279 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.ast.statement; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.*; +import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; +import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr; +import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +import java.util.ArrayList; +import java.util.List; + +public class SQLAlterViewStatement extends SQLStatementImpl implements SQLCreateStatement { + + private boolean force = false; + // protected SQLName name; + protected SQLSelect subQuery; + protected boolean ifNotExists = false; + + protected String algorithm; + protected SQLName definer; + protected String sqlSecurity; + + protected SQLExprTableSource tableSource; + + protected final List columns = new ArrayList(); + + private boolean withCheckOption; + private boolean withCascaded; + private boolean withLocal; + private boolean withReadOnly; + + private SQLLiteralExpr comment; + + public SQLAlterViewStatement(){ + + } + + public SQLAlterViewStatement(String dbType){ + super(dbType); + } + + public String computeName() { + if (tableSource == null) { + return null; + } + + SQLExpr expr = tableSource.getExpr(); + if (expr instanceof SQLName) { + String name = ((SQLName) expr).getSimpleName(); + return SQLUtils.normalize(name); + } + + return null; + } + + public String getSchema() { + SQLName name = getName(); + if (name == null) { + return null; + } + + if (name instanceof SQLPropertyExpr) { + return ((SQLPropertyExpr) name).getOwnernName(); + } + + return null; + } + + public SQLName getName() { + if (tableSource == null) { + return null; + } + + return (SQLName) tableSource.getExpr(); + } + + public void setName(SQLName name) { + this.setTableSource(new SQLExprTableSource(name)); + } + + public void setName(String name) { + this.setName(new SQLIdentifierExpr(name)); + } + + public SQLExprTableSource getTableSource() { + return tableSource; + } + + public void setTableSource(SQLExprTableSource tableSource) { + if (tableSource != null) { + tableSource.setParent(this); + } + this.tableSource = tableSource; + } + + public boolean isWithCheckOption() { + return withCheckOption; + } + + public void setWithCheckOption(boolean withCheckOption) { + this.withCheckOption = withCheckOption; + } + + public boolean isWithCascaded() { + return withCascaded; + } + + public void setWithCascaded(boolean withCascaded) { + this.withCascaded = withCascaded; + } + + public boolean isWithLocal() { + return withLocal; + } + + public void setWithLocal(boolean withLocal) { + this.withLocal = withLocal; + } + + public boolean isWithReadOnly() { + return withReadOnly; + } + + public void setWithReadOnly(boolean withReadOnly) { + this.withReadOnly = withReadOnly; + } + + public SQLSelect getSubQuery() { + return subQuery; + } + + public void setSubQuery(SQLSelect subQuery) { + if (subQuery != null) { + subQuery.setParent(this); + } + this.subQuery = subQuery; + } + + public List getColumns() { + return columns; + } + + public void addColumn(SQLTableElement column) { + if (column != null) { + column.setParent(this); + } + this.columns.add(column); + } + + public boolean isIfNotExists() { + return ifNotExists; + } + + public void setIfNotExists(boolean ifNotExists) { + this.ifNotExists = ifNotExists; + } + + public SQLLiteralExpr getComment() { + return comment; + } + + public void setComment(SQLLiteralExpr comment) { + if (comment != null) { + comment.setParent(this); + } + this.comment = comment; + } + + public String getAlgorithm() { + return algorithm; + } + + public void setAlgorithm(String algorithm) { + this.algorithm = algorithm; + } + + public SQLName getDefiner() { + return definer; + } + + public void setDefiner(SQLName definer) { + if (definer != null) { + definer.setParent(this); + } + this.definer = definer; + } + + public String getSqlSecurity() { + return sqlSecurity; + } + + public void setSqlSecurity(String sqlSecurity) { + this.sqlSecurity = sqlSecurity; + } + + public boolean isForce() { + return force; + } + + public void setForce(boolean force) { + this.force = force; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, this.tableSource); + acceptChild(visitor, this.columns); + acceptChild(visitor, this.comment); + acceptChild(visitor, this.subQuery); + } + visitor.endVisit(this); + } + + public List getChildren() { + List children = new ArrayList(); + if (tableSource != null) { + children.add(tableSource); + } + children.addAll(this.columns); + if (comment != null) { + children.add(comment); + } + if (subQuery != null) { + children.add(subQuery); + } + return children; + } + + public SQLAlterViewStatement clone() { + SQLAlterViewStatement x = new SQLAlterViewStatement(); + + x.force = force; + if (subQuery != null) { + x.setSubQuery(subQuery.clone()); + } + x.ifNotExists = ifNotExists; + + x.algorithm = algorithm; + if (definer != null) { + x.setDefiner(definer.clone()); + } + x.sqlSecurity = sqlSecurity; + if (tableSource != null) { + x.setTableSource(tableSource.clone()); + } + for (SQLTableElement column : columns) { + SQLTableElement column2 = column.clone(); + column2.setParent(x); + x.columns.add(column2); + } + x.withCheckOption = withCheckOption; + x.withCascaded = withCascaded; + x.withLocal = withLocal; + x.withReadOnly = withReadOnly; + + if (comment != null) { + x.setComment(comment.clone()); + } + + return x; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLColumnReference.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLColumnReference.java index 345741b265..fd93b13314 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLColumnReference.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLColumnReference.java @@ -26,6 +26,14 @@ public class SQLColumnReference extends SQLConstraintImpl implements SQLColumnCo private SQLName table; private List columns = new ArrayList(); + private SQLForeignKeyImpl.Match referenceMatch; + protected SQLForeignKeyImpl.Option onUpdate; + protected SQLForeignKeyImpl.Option onDelete; + + public SQLColumnReference() { + + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { @@ -65,7 +73,34 @@ public class SQLColumnReference extends SQLConstraintImpl implements SQLColumnCo x.columns.add(columnCloned); } + x.referenceMatch = referenceMatch; + x.onUpdate = onUpdate; + x.onDelete = onDelete; + return x; } + public SQLForeignKeyImpl.Match getReferenceMatch() { + return referenceMatch; + } + + public void setReferenceMatch(SQLForeignKeyImpl.Match referenceMatch) { + this.referenceMatch = referenceMatch; + } + + public SQLForeignKeyImpl.Option getOnUpdate() { + return onUpdate; + } + + public void setOnUpdate(SQLForeignKeyImpl.Option onUpdate) { + this.onUpdate = onUpdate; + } + + public SQLForeignKeyImpl.Option getOnDelete() { + return onDelete; + } + + public void setOnDelete(SQLForeignKeyImpl.Option onDelete) { + this.onDelete = onDelete; + } } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java index bb413e58d1..0085c7aead 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java @@ -39,6 +39,8 @@ public class SQLCreateIndexStatement extends SQLStatementImpl implements SQLCrea // for mysql private String using; + private SQLExpr comment; + public SQLCreateIndexStatement(){ } @@ -168,6 +170,20 @@ public class SQLCreateIndexStatement extends SQLStatementImpl implements SQLCrea } x.type = type; x.using = using; + if (comment != null) { + x.setComment(comment.clone()); + } return x; } + + public SQLExpr getComment() { + return comment; + } + + public void setComment(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.comment = x; + } } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java index 6a0990dc7d..f6107be07b 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java @@ -24,11 +24,11 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLCreateTriggerStatement extends SQLStatementImpl implements SQLCreateStatement { private SQLName name; - private boolean orReplace = false; - private TriggerType triggerType; + private SQLName definer; + private boolean update; private boolean delete; private boolean insert; @@ -153,11 +153,11 @@ public class SQLCreateTriggerStatement extends SQLStatementImpl implements SQLCr return when; } - public void setWhen(SQLExpr when) { - if (when != null) { - when.setParent(this); + public void setWhen(SQLExpr x) { + if (x != null) { + x.setParent(this); } - this.when = when; + this.when = x; } public boolean isUpdate() { @@ -184,6 +184,17 @@ public class SQLCreateTriggerStatement extends SQLStatementImpl implements SQLCr this.insert = insert; } + public SQLName getDefiner() { + return definer; + } + + public void setDefiner(SQLName x) { + if (x != null) { + x.setParent(this); + } + this.definer = x; + } + public static enum TriggerType { BEFORE, AFTER, INSTEAD_OF } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropEventStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropEventStatement.java new file mode 100644 index 0000000000..eb835745e3 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropEventStatement.java @@ -0,0 +1,75 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLObject; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +import java.util.ArrayList; +import java.util.List; + +public class SQLDropEventStatement extends SQLStatementImpl implements SQLDropStatement { + + private SQLExpr name; + private boolean ifExists; + + public SQLDropEventStatement() { + + } + + public SQLDropEventStatement(String dbType) { + super (dbType); + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public SQLExpr getName() { + return name; + } + + public void setName(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.name = x; + } + + public boolean isIfExists() { + return ifExists; + } + + public void setIfExists(boolean ifExists) { + this.ifExists = ifExists; + } + + @Override + public List getChildren() { + List children = new ArrayList(); + if (name != null) { + children.add(name); + } + return children; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java index 8d449ff225..dccf60b77a 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java @@ -28,6 +28,9 @@ public class SQLDropIndexStatement extends SQLStatementImpl implements SQLDropSt private SQLName indexName; private SQLExprTableSource tableName; + + private SQLExpr algorithm; + private SQLExpr lockOption; public SQLDropIndexStatement() { @@ -57,11 +60,35 @@ public class SQLDropIndexStatement extends SQLStatementImpl implements SQLDropSt this.tableName = tableName; } + public SQLExpr getAlgorithm() { + return algorithm; + } + + public void setAlgorithm(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.algorithm = x; + } + + public SQLExpr getLockOption() { + return lockOption; + } + + public void setLockOption(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.lockOption = x; + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, indexName); acceptChild(visitor, tableName); + acceptChild(visitor, algorithm); + acceptChild(visitor, lockOption); } visitor.endVisit(this); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropLogFileGroupStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropLogFileGroupStatement.java new file mode 100644 index 0000000000..bfec1e3f26 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropLogFileGroupStatement.java @@ -0,0 +1,79 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLObject; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +import java.util.ArrayList; +import java.util.List; + +public class SQLDropLogFileGroupStatement extends SQLStatementImpl implements SQLDropStatement { + + private SQLExpr name; + private SQLExpr engine; + + public SQLDropLogFileGroupStatement() { + + } + + public SQLDropLogFileGroupStatement(String dbType) { + super (dbType); + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + acceptChild(visitor, engine); + } + visitor.endVisit(this); + } + + public SQLExpr getName() { + return name; + } + + public void setName(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.name = x; + } + + public SQLExpr getEngine() { + return engine; + } + + public void setEngine(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.engine = x; + } + + @Override + public List getChildren() { + List children = new ArrayList(); + if (name != null) { + children.add(name); + } + return children; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropServerStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropServerStatement.java new file mode 100644 index 0000000000..975f44f7bb --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropServerStatement.java @@ -0,0 +1,74 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLObject; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +import java.util.ArrayList; +import java.util.List; + +public class SQLDropServerStatement extends SQLStatementImpl implements SQLDropStatement { + + private SQLExpr name; + private boolean ifExists; + + public SQLDropServerStatement() { + + } + + public SQLDropServerStatement(String dbType) { + super (dbType); + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public SQLExpr getName() { + return name; + } + + public void setName(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.name = x; + } + + @Override + public List getChildren() { + List children = new ArrayList(); + if (name != null) { + children.add(name); + } + return children; + } + + public boolean isIfExists() { + return ifExists; + } + + public void setIfExists(boolean ifExists) { + this.ifExists = ifExists; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java index 3cb75d9021..7e8faac6f4 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java @@ -15,6 +15,7 @@ */ package com.alibaba.druid.sql.ast.statement; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -23,6 +24,7 @@ public class SQLDropTableSpaceStatement extends SQLStatementImpl implements SQLD private SQLName name; private boolean ifExists; + private SQLExpr engine; public SQLDropTableSpaceStatement() { @@ -44,11 +46,22 @@ public class SQLDropTableSpaceStatement extends SQLStatementImpl implements SQLD return name; } - public void setName(SQLName name) { - if (name != null) { - name.setParent(this); + public void setName(SQLName x) { + if (x != null) { + x.setParent(this); } - this.name = name; + this.name = x; + } + + public SQLExpr getEngine() { + return engine; + } + + public void setEngine(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.engine = x; } public boolean isIfExists() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExprStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExprStatement.java similarity index 70% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExprStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLExprStatement.java index 223e28fb83..ee8ba6e95b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExprStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExprStatement.java @@ -13,25 +13,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.oracle.ast.stmt; +package com.alibaba.druid.sql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleStatementImpl; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleExprStatement extends OracleStatementImpl { +public class SQLExprStatement extends SQLStatementImpl { private SQLExpr expr; - public OracleExprStatement(){ + public SQLExprStatement(){ } - public OracleExprStatement(SQLExpr expr){ + public SQLExprStatement(SQLExpr expr){ this.expr = expr; } @Override - public void accept0(OracleASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, expr); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLForeignKeyImpl.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLForeignKeyImpl.java index 5125ced984..3d0846e7da 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLForeignKeyImpl.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLForeignKeyImpl.java @@ -123,4 +123,47 @@ public class SQLForeignKeyImpl extends SQLConstraintImpl implements SQLForeignKe cloneTo(x); return x; } + + public static enum Match { + FULL("FULL"), PARTIAL("PARTIAL"), SIMPLE("SIMPLE"); + + public final String name; + public final String name_lcase; + + Match(String name){ + this.name = name; + this.name_lcase = name.toLowerCase(); + } + } + + public static enum On { + DELETE("DELETE"), // + UPDATE("UPDATE"); + + public final String name; + public final String name_lcase; + + On(String name){ + this.name = name; + this.name_lcase = name.toLowerCase(); + } + } + + public static enum Option { + + RESTRICT("RESTRICT"), CASCADE("CASCADE"), SET_NULL("SET NULL"), NO_ACTION("NO ACTION"); + + public final String name; + public final String name_lcase; + + Option(String name){ + this.name = name; + this.name_lcase = name.toLowerCase(); + } + + public String getText() { + return name; + } + + } } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLShowErrorsStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLShowErrorsStatement.java index 62e318e9d1..585305d739 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLShowErrorsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLShowErrorsStatement.java @@ -1,3 +1,18 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.alibaba.druid.sql.ast.statement; import com.alibaba.druid.sql.ast.SQLStatementImpl; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/MysqlForeignKey.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/MysqlForeignKey.java index 619a9237ee..b2a884b5b9 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/MysqlForeignKey.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/MysqlForeignKey.java @@ -25,13 +25,9 @@ import com.alibaba.druid.util.JdbcConstants; * @author kiki */ public class MysqlForeignKey extends SQLForeignKeyImpl { - private SQLName indexName; - private boolean hasConstraint; - private Match referenceMatch; - protected Option onUpdate; protected Option onDelete; @@ -74,6 +70,17 @@ public class MysqlForeignKey extends SQLForeignKeyImpl { visitor.endVisit(this); } + public MysqlForeignKey clone() { + MysqlForeignKey x = new MysqlForeignKey(); + cloneTo(x); + + x.referenceMatch = referenceMatch; + x.onUpdate = onUpdate; + x.onDelete = onDelete; + + return x; + } + public Match getReferenceMatch() { return referenceMatch; } @@ -98,46 +105,4 @@ public class MysqlForeignKey extends SQLForeignKeyImpl { this.onDelete = onDelete; } - public static enum Option { - - RESTRICT("RESTRICT"), CASCADE("CASCADE"), SET_NULL("SET NULL"), NO_ACTION("NO ACTION"); - - public final String name; - public final String name_lcase; - - Option(String name){ - this.name = name; - this.name_lcase = name.toLowerCase(); - } - - public String getText() { - return name; - } - - } - - public static enum Match { - FULL("FULL"), PARTIAL("PARTIAL"), SIMPLE("SIMPLE"); - - public final String name; - public final String name_lcase; - - Match(String name){ - this.name = name; - this.name_lcase = name.toLowerCase(); - } - } - - public static enum On { - DELETE("DELETE"), // - UPDATE("UPDATE"); - - public final String name; - public final String name_lcase; - - On(String name){ - this.name = name; - this.name_lcase = name.toLowerCase(); - } - } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterEventStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterEventStatement.java new file mode 100644 index 0000000000..2739d6f404 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterEventStatement.java @@ -0,0 +1,129 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLAlterStatement; +import com.alibaba.druid.util.JdbcConstants; + +public class MySqlAlterEventStatement extends MySqlStatementImpl implements SQLAlterStatement { + private SQLName definer; + private SQLName name; + + private MySqlEventSchedule schedule; + private boolean onCompletionPreserve; + private SQLName renameTo; + private Boolean enable; + private boolean disableOnSlave; + private SQLExpr comment; + private SQLStatement eventBody; + + public MySqlAlterEventStatement() { + setDbType(JdbcConstants.MYSQL); + } + + public SQLName getDefiner() { + return definer; + } + + public void setDefiner(SQLName definer) { + if (definer != null) { + definer.setParent(this); + } + this.definer = definer; + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + if (name != null) { + name.setParent(this); + } + this.name = name; + } + + public MySqlEventSchedule getSchedule() { + return schedule; + } + + public void setSchedule(MySqlEventSchedule schedule) { + if (schedule != null) { + schedule.setParent(this); + } + this.schedule = schedule; + } + + public boolean isOnCompletionPreserve() { + return onCompletionPreserve; + } + + public void setOnCompletionPreserve(boolean onCompletionPreserve) { + this.onCompletionPreserve = onCompletionPreserve; + } + + public SQLName getRenameTo() { + return renameTo; + } + + public void setRenameTo(SQLName renameTo) { + if (renameTo != null) { + renameTo.setParent(this); + } + this.renameTo = renameTo; + } + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } + + public boolean isDisableOnSlave() { + return disableOnSlave; + } + + public void setDisableOnSlave(boolean disableOnSlave) { + this.disableOnSlave = disableOnSlave; + } + + public SQLExpr getComment() { + return comment; + } + + public void setComment(SQLExpr comment) { + if (comment != null) { + comment.setParent(this); + } + this.comment = comment; + } + + public SQLStatement getEventBody() { + return eventBody; + } + + public void setEventBody(SQLStatement eventBody) { + if (eventBody != null) { + eventBody.setParent(this); + } + this.eventBody = eventBody; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterLogFileGroupStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterLogFileGroupStatement.java new file mode 100644 index 0000000000..713e7ec012 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterLogFileGroupStatement.java @@ -0,0 +1,80 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.statement.SQLAlterStatement; + +public class MySqlAlterLogFileGroupStatement extends MySqlStatementImpl implements SQLAlterStatement { + private SQLName name; + private SQLExpr addUndoFile; + private SQLExpr initialSize; + private boolean wait; + private SQLExpr engine; + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + if (name != null) { + name.setParent(this); + } + this.name = name; + } + + public SQLExpr getAddUndoFile() { + return addUndoFile; + } + + public void setAddUndoFile(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.addUndoFile = x; + } + + public SQLExpr getInitialSize() { + return initialSize; + } + + public void setInitialSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.initialSize = x; + } + + public boolean isWait() { + return wait; + } + + public void setWait(boolean wait) { + this.wait = wait; + } + + public SQLExpr getEngine() { + return engine; + } + + public void setEngine(SQLExpr engine) { + if (engine != null) { + engine.setParent(this); + } + this.engine = engine; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterServerStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterServerStatement.java new file mode 100644 index 0000000000..9afaca7c64 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterServerStatement.java @@ -0,0 +1,49 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.statement.SQLAlterStatement; + +public class MySqlAlterServerStatement extends MySqlStatementImpl implements SQLAlterStatement { + private SQLName name; + + // options + private SQLExpr user; + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + if (name != null) { + name.setParent(this); + } + this.name = name; + } + + public SQLExpr getUser() { + return user; + } + + public void setUser(SQLExpr user) { + if (user != null) { + user.setParent(this); + } + this.user = user; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTablespaceStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTablespaceStatement.java new file mode 100644 index 0000000000..a42b1e6dca --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTablespaceStatement.java @@ -0,0 +1,93 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.statement.SQLAlterStatement; + +public class MySqlAlterTablespaceStatement extends MySqlStatementImpl implements SQLAlterStatement { + private SQLName name; + + private SQLExpr addDataFile; + private SQLExpr dropDataFile; + private SQLExpr initialSize; + private boolean wait; + private SQLExpr engine; + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + if (name != null) { + name.setParent(this); + } + this.name = name; + } + + public SQLExpr getAddDataFile() { + return addDataFile; + } + + public void setAddDataFile(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.addDataFile = addDataFile; + } + + public SQLExpr getDropDataFile() { + return dropDataFile; + } + + public void setDropDataFile(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.dropDataFile = dropDataFile; + } + + public SQLExpr getInitialSize() { + return initialSize; + } + + public void setInitialSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.initialSize = x; + } + + public boolean isWait() { + return wait; + } + + public void setWait(boolean wait) { + this.wait = wait; + } + + public SQLExpr getEngine() { + return engine; + } + + public void setEngine(SQLExpr engine) { + if (engine != null) { + engine.setParent(this); + } + this.engine = engine; + } +} \ No newline at end of file diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateAddLogFileGroupStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateAddLogFileGroupStatement.java new file mode 100644 index 0000000000..3363cd4dde --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateAddLogFileGroupStatement.java @@ -0,0 +1,143 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.statement.SQLAlterStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +public class MySqlCreateAddLogFileGroupStatement extends MySqlStatementImpl implements SQLAlterStatement { + private SQLName name; + private SQLExpr addUndoFile; + private SQLExpr initialSize; + private SQLExpr undoBufferSize; + private SQLExpr redoBufferSize; + private SQLExpr nodeGroup; + private boolean wait; + private SQLExpr comment; + private SQLExpr engine; + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + if (name != null) { + name.setParent(this); + } + this.name = name; + } + + public SQLExpr getAddUndoFile() { + return addUndoFile; + } + + public void setAddUndoFile(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.addUndoFile = x; + } + + public SQLExpr getInitialSize() { + return initialSize; + } + + public void setInitialSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.initialSize = x; + } + + public SQLExpr getUndoBufferSize() { + return undoBufferSize; + } + + public void setUndoBufferSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.undoBufferSize = x; + } + + public SQLExpr getRedoBufferSize() { + return redoBufferSize; + } + + public void setRedoBufferSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.redoBufferSize = x; + } + + public boolean isWait() { + return wait; + } + + public void setWait(boolean wait) { + this.wait = wait; + } + + public SQLExpr getEngine() { + return engine; + } + + public void setEngine(SQLExpr engine) { + if (engine != null) { + engine.setParent(this); + } + this.engine = engine; + } + + public SQLExpr getNodeGroup() { + return nodeGroup; + } + + public void setNodeGroup(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.nodeGroup = x; + } + + public SQLExpr getComment() { + return comment; + } + + public void setComment(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.comment = x; + } + + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + acceptChild(visitor, addUndoFile); + acceptChild(visitor, initialSize); + acceptChild(visitor, undoBufferSize); + acceptChild(visitor, redoBufferSize); + acceptChild(visitor, nodeGroup); + acceptChild(visitor, comment); + acceptChild(visitor, engine); + } + visitor.endVisit(this); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateEventStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateEventStatement.java new file mode 100644 index 0000000000..9cdfc41407 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateEventStatement.java @@ -0,0 +1,153 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLAlterStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; +import com.alibaba.druid.util.JdbcConstants; + +public class MySqlCreateEventStatement extends MySqlStatementImpl implements SQLAlterStatement { + private SQLName definer; + private SQLName name; + + private boolean ifNotExists; + + private MySqlEventSchedule schedule; + private boolean onCompletionPreserve; + private SQLName renameTo; + private Boolean enable; + private boolean disableOnSlave; + private SQLExpr comment; + private SQLStatement eventBody; + + public MySqlCreateEventStatement() { + setDbType(JdbcConstants.MYSQL); + } + + public SQLName getDefiner() { + return definer; + } + + public void setDefiner(SQLName definer) { + if (definer != null) { + definer.setParent(this); + } + this.definer = definer; + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + if (name != null) { + name.setParent(this); + } + this.name = name; + } + + public MySqlEventSchedule getSchedule() { + return schedule; + } + + public void setSchedule(MySqlEventSchedule schedule) { + if (schedule != null) { + schedule.setParent(this); + } + this.schedule = schedule; + } + + public boolean isOnCompletionPreserve() { + return onCompletionPreserve; + } + + public void setOnCompletionPreserve(boolean onCompletionPreserve) { + this.onCompletionPreserve = onCompletionPreserve; + } + + public SQLName getRenameTo() { + return renameTo; + } + + public void setRenameTo(SQLName renameTo) { + if (renameTo != null) { + renameTo.setParent(this); + } + this.renameTo = renameTo; + } + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } + + public boolean isDisableOnSlave() { + return disableOnSlave; + } + + public void setDisableOnSlave(boolean disableOnSlave) { + this.disableOnSlave = disableOnSlave; + } + + public SQLExpr getComment() { + return comment; + } + + public void setComment(SQLExpr comment) { + if (comment != null) { + comment.setParent(this); + } + this.comment = comment; + } + + public SQLStatement getEventBody() { + return eventBody; + } + + public void setEventBody(SQLStatement eventBody) { + if (eventBody != null) { + eventBody.setParent(this); + } + this.eventBody = eventBody; + } + + public boolean isIfNotExists() { + return ifNotExists; + } + + public void setIfNotExists(boolean ifNotExists) { + this.ifNotExists = ifNotExists; + } + + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, definer); + acceptChild(visitor, name); + acceptChild(visitor, schedule); + acceptChild(visitor, renameTo); + acceptChild(visitor, comment); + acceptChild(visitor, eventBody); + } + visitor.endVisit(this); + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateServerStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateServerStatement.java new file mode 100644 index 0000000000..3004d63332 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateServerStatement.java @@ -0,0 +1,133 @@ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.statement.SQLAlterStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +public class MySqlCreateServerStatement extends MySqlStatementImpl implements SQLCreateStatement { + private SQLName name; + private SQLName foreignDataWrapper; + private SQLExpr host; + private SQLExpr database; + private SQLExpr user; + private SQLExpr password; + private SQLExpr socket; + private SQLExpr owner; + private SQLExpr port; + + public SQLName getName() { + return name; + } + + public void setName(SQLName x) { + if (x != null) { + x.setParent(this); + } + this.name = x; + } + + public SQLName getForeignDataWrapper() { + return foreignDataWrapper; + } + + public void setForeignDataWrapper(SQLName x) { + if (x != null) { + x.setParent(this); + } + this.foreignDataWrapper = x; + } + + public SQLExpr getHost() { + return host; + } + + public void setHost(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.host = x; + } + + public SQLExpr getDatabase() { + return database; + } + + public void setDatabase(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.database = x; + } + + public SQLExpr getUser() { + return user; + } + + public void setUser(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.user = x; + } + + public SQLExpr getPassword() { + return password; + } + + public void setPassword(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.password = x; + } + + public SQLExpr getSocket() { + return socket; + } + + public void setSocket(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.socket = x; + } + + public SQLExpr getOwner() { + return owner; + } + + public void setOwner(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.owner = x; + } + + public SQLExpr getPort() { + return port; + } + + public void setPort(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.port = x; + } + + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + acceptChild(visitor, foreignDataWrapper); + acceptChild(visitor, host); + acceptChild(visitor, database); + acceptChild(visitor, user); + acceptChild(visitor, password); + acceptChild(visitor, socket); + acceptChild(visitor, owner); + acceptChild(visitor, port); + } + visitor.endVisit(this); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableSpaceStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableSpaceStatement.java new file mode 100644 index 0000000000..631ca59e59 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableSpaceStatement.java @@ -0,0 +1,167 @@ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.statement.SQLCreateStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +public class MySqlCreateTableSpaceStatement extends MySqlStatementImpl implements SQLCreateStatement { + private SQLName name; + private SQLExpr addDataFile; + private SQLExpr initialSize; + private SQLExpr extentSize; + private SQLExpr autoExtentSize; + private SQLExpr fileBlockSize; + private SQLExpr logFileGroup; + private SQLExpr maxSize; + private SQLExpr nodeGroup; + private boolean wait; + private SQLExpr comment; + private SQLExpr engine; + + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + acceptChild(visitor, addDataFile); + acceptChild(visitor, initialSize); + acceptChild(visitor, extentSize); + acceptChild(visitor, autoExtentSize); + acceptChild(visitor, fileBlockSize); + acceptChild(visitor, logFileGroup); + acceptChild(visitor, maxSize); + acceptChild(visitor, nodeGroup); + acceptChild(visitor, comment); + acceptChild(visitor, engine); + } + visitor.endVisit(this); + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName x) { + if (x != null) { + x.setParent(this); + } + this.name = x; + } + + public SQLExpr getAddDataFile() { + return addDataFile; + } + + public void setAddDataFile(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.addDataFile = addDataFile; + } + + public SQLExpr getInitialSize() { + return initialSize; + } + + public void setInitialSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.initialSize = x; + } + + public SQLExpr getFileBlockSize() { + return fileBlockSize; + } + + public void setFileBlockSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.fileBlockSize = x; + } + + public boolean isWait() { + return wait; + } + + public void setWait(boolean wait) { + this.wait = wait; + } + + public SQLExpr getEngine() { + return engine; + } + + public void setEngine(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.engine = engine; + } + + public SQLExpr getLogFileGroup() { + return logFileGroup; + } + + public void setLogFileGroup(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.logFileGroup = x; + } + + public SQLExpr getExtentSize() { + return extentSize; + } + + public void setExtentSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.extentSize = x; + } + + public SQLExpr getAutoExtentSize() { + return autoExtentSize; + } + + public void setAutoExtentSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.autoExtentSize = x; + } + + public SQLExpr getMaxSize() { + return maxSize; + } + + public void setMaxSize(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.maxSize = x; + } + + public SQLExpr getNodeGroup() { + return nodeGroup; + } + + public void setNodeGroup(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.nodeGroup = x; + } + + public SQLExpr getComment() { + return comment; + } + + public void setComment(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.comment = x; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java index a5d03878a3..abafeaab2c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java @@ -26,11 +26,9 @@ import com.alibaba.druid.sql.ast.SQLCommentHint; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; -import com.alibaba.druid.sql.ast.SQLPartitionBy; import com.alibaba.druid.sql.ast.statement.*; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; @@ -198,8 +196,8 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement } else if (item instanceof MySqlAlterTableChangeColumn) { return apply((MySqlAlterTableChangeColumn) item); - } else if (item instanceof MySqlAlterTableCharacter) { - return apply((MySqlAlterTableCharacter) item); + } else if (item instanceof SQLAlterCharacter) { + return apply((SQLAlterCharacter) item); } else if (item instanceof MySqlAlterTableModifyColumn) { return apply((MySqlAlterTableModifyColumn) item); @@ -240,7 +238,7 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement return true; } - public boolean apply(MySqlAlterTableCharacter item) { + public boolean apply(SQLAlterCharacter item) { SQLExpr charset = item.getCharacterSet(); if (charset != null) { this.tableOptions.put("CHARACTER SET", charset); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlEventSchedule.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlEventSchedule.java new file mode 100644 index 0000000000..be87287c61 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlEventSchedule.java @@ -0,0 +1,83 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject; +import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +public class MySqlEventSchedule extends MySqlObjectImpl { + private SQLExpr at; + private SQLExpr every; + private SQLExpr starts; + private SQLExpr ends; + + @Override + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, at); + acceptChild(visitor, every); + acceptChild(visitor, starts); + acceptChild(visitor, ends); + } + visitor.endVisit(this); + } + + public SQLExpr getAt() { + return at; + } + + public void setAt(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.at = x; + } + + public SQLExpr getEvery() { + return every; + } + + public void setEvery(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.every = x; + } + + public SQLExpr getStarts() { + return starts; + } + + public void setStarts(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.starts = x; + } + + public SQLExpr getEnds() { + return ends; + } + + public void setEnds(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.ends = x; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java index 0dd4fe092d..332acfa7d2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java @@ -15,14 +15,7 @@ */ package com.alibaba.druid.sql.dialect.mysql.parser; -import com.alibaba.druid.sql.ast.SQLDataType; -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.ast.SQLOrderBy; -import com.alibaba.druid.sql.ast.SQLOrderingSpecification; -import com.alibaba.druid.sql.ast.SQLPartition; -import com.alibaba.druid.sql.ast.SQLPartitionValue; -import com.alibaba.druid.sql.ast.SQLSubPartition; +import com.alibaba.druid.sql.ast.*; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; @@ -35,11 +28,11 @@ import com.alibaba.druid.sql.ast.expr.SQLUnaryOperator; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; +import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique; import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; -import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey.Match; -import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey.Option; +import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl.*; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; import com.alibaba.druid.sql.ast.expr.SQLIntervalExpr; @@ -307,21 +300,7 @@ public class MySqlExprParser extends SQLExprParser { // } if (lexer.token() == Token.VARIANT && "@".equals(lexer.stringVal())) { - lexer.nextToken(); - MySqlUserName userName = new MySqlUserName(); - if (expr instanceof SQLCharExpr) { - userName.setUserName(((SQLCharExpr) expr).toString()); - } else { - userName.setUserName(((SQLIdentifierExpr) expr).getName()); - } - - if (lexer.token() == Token.LITERAL_CHARS) { - userName.setHost("'" + lexer.stringVal() + "'"); - } else { - userName.setHost(lexer.stringVal()); - } - lexer.nextToken(); - return userName; + return userNameRest(expr); } if (lexer.token() == Token.ERROR) { @@ -331,6 +310,47 @@ public class MySqlExprParser extends SQLExprParser { return super.primaryRest(expr); } + public SQLName userName() { + SQLName name = this.name(); + if (lexer.token() == Token.LPAREN && name.hashCode64() == FnvHash.Constants.CURRENT_USER) { + lexer.nextToken(); + accept(Token.RPAREN); + return name; + } + + return (SQLName) userNameRest(name); + } + + private SQLExpr userNameRest(SQLExpr expr) { + if (lexer.token() != Token.VARIANT || !lexer.stringVal().startsWith("@")) { + return expr; + } + + MySqlUserName userName = new MySqlUserName(); + if (expr instanceof SQLCharExpr) { + userName.setUserName(((SQLCharExpr) expr).toString()); + } else { + userName.setUserName(((SQLIdentifierExpr) expr).getName()); + } + + + String strVal = lexer.stringVal(); + lexer.nextToken(); + + if (strVal.length() > 1) { + userName.setHost(strVal.substring(1)); + return userName; + } + + if (lexer.token() == Token.LITERAL_CHARS) { + userName.setHost("'" + lexer.stringVal() + "'"); + } else { + userName.setHost(lexer.stringVal()); + } + lexer.nextToken(); + return userName; + } + protected SQLExpr parsePosition() { SQLExpr subStr = this.primary(); @@ -542,14 +562,16 @@ public class MySqlExprParser extends SQLExprParser { protected SQLDataType parseDataTypeRest(SQLDataType dataType) { super.parseDataTypeRest(dataType); - if (lexer.identifierEquals(FnvHash.Constants.UNSIGNED)) { - lexer.nextToken(); - dataType.getAttributes().put("UNSIGNED", true); - } - - if (lexer.identifierEquals(FnvHash.Constants.ZEROFILL)) { - lexer.nextToken(); - dataType.getAttributes().put("ZEROFILL", true); + for (;;) { + if (lexer.identifierEquals(FnvHash.Constants.UNSIGNED)) { + lexer.nextToken(); + ((SQLDataTypeImpl) dataType).setUnsigned(true); + } else if (lexer.identifierEquals(FnvHash.Constants.ZEROFILL)) { + lexer.nextToken(); + ((SQLDataTypeImpl) dataType).setZerofill(true); + } else { + break; + } } return dataType; @@ -778,12 +800,18 @@ public class MySqlExprParser extends SQLExprParser { accept(Token.RPAREN); if (lexer.identifierEquals(FnvHash.Constants.MATCH)) { - if (lexer.identifierEquals("FULL")) { - fk.setReferenceMatch(Match.FULL); + lexer.nextToken(); + if (lexer.identifierEquals("FULL") || lexer.token() == Token.FULL) { + fk.setReferenceMatch(SQLForeignKeyImpl.Match.FULL); + lexer.nextToken(); } else if (lexer.identifierEquals(FnvHash.Constants.PARTIAL)) { - fk.setReferenceMatch(Match.PARTIAL); + fk.setReferenceMatch(SQLForeignKeyImpl.Match.PARTIAL); + lexer.nextToken(); } else if (lexer.identifierEquals(FnvHash.Constants.SIMPLE)) { - fk.setReferenceMatch(Match.SIMPLE); + fk.setReferenceMatch(SQLForeignKeyImpl.Match.SIMPLE); + lexer.nextToken(); + } else { + throw new ParserException("TODO : " + lexer.info()); } } @@ -808,35 +836,6 @@ public class MySqlExprParser extends SQLExprParser { return fk; } - protected Option parseReferenceOption() { - Option option; - if (lexer.token() == Token.RESTRICT || lexer.identifierEquals(FnvHash.Constants.RESTRICT)) { - option = Option.RESTRICT; - lexer.nextToken(); - } else if (lexer.identifierEquals(FnvHash.Constants.CASCADE)) { - option = Option.CASCADE; - lexer.nextToken(); - } else if (lexer.token() == Token.SET) { - lexer.nextToken(); - accept(Token.NULL); - option = Option.SET_NULL; - } else if (lexer.token() == Token.ON || lexer.identifierEquals(FnvHash.Constants.ON)) { - lexer.nextToken(); - if (lexer.identifierEquals(FnvHash.Constants.ACTION)) { - option = Option.NO_ACTION; - lexer.nextToken(); - } else { - throw new ParserException("syntax error, expect ACTION, actual " + lexer.token() + " " - + lexer.info()); - } - } else { - throw new ParserException("syntax error, expect ACTION, actual " + lexer.token() + " " - + lexer.info()); - } - - return option; - } - protected SQLAggregateExpr parseAggregateExprRest(SQLAggregateExpr aggregateExpr) { if (lexer.token() == Token.ORDER) { SQLOrderBy orderBy = this.parseOrderBy(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java index 834b83cc2f..cd61b47b96 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java @@ -23,6 +23,7 @@ import java.util.Map; import com.alibaba.druid.sql.parser.*; import com.alibaba.druid.util.FnvHash; +import com.alibaba.druid.util.JdbcConstants; public class MySqlLexer extends Lexer { public static SymbolTable quoteTable = new SymbolTable(8192); @@ -64,6 +65,10 @@ public class MySqlLexer extends Lexer { DEFAULT_MYSQL_KEYWORDS = new Keywords(map); } + { + dbType = JdbcConstants.MYSQL; + } + public MySqlLexer(char[] input, int inputLength, boolean skipComment){ super(input, inputLength, skipComment); super.keywods = DEFAULT_MYSQL_KEYWORDS; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java index b30e9e62d7..023bfb134a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java @@ -297,7 +297,8 @@ public class MySqlSelectParser extends SQLSelectParser { update.setTargetAffectRow(targetAffectRow); } - SQLTableSource updateTableSource = this.exprParser.createSelectParser().parseTableSource(); + SQLSelectParser selectParser = this.exprParser.createSelectParser(); + SQLTableSource updateTableSource = selectParser.parseTableSource(); update.setTableSource(updateTableSource); accept(Token.SET); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index a23b71a0cf..73c07d60a2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -19,7 +19,6 @@ import com.alibaba.druid.sql.ast.*; import com.alibaba.druid.sql.ast.SQLParameter.ParameterType; import com.alibaba.druid.sql.ast.expr.*; import com.alibaba.druid.sql.ast.statement.*; -import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; import com.alibaba.druid.sql.dialect.mysql.ast.clause.ConditionValue; import com.alibaba.druid.sql.dialect.mysql.ast.clause.ConditionValue.ConditionType; @@ -39,7 +38,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement import com.alibaba.druid.sql.parser.*; import com.alibaba.druid.util.FnvHash; import com.alibaba.druid.util.JdbcConstants; -import jdk.nashorn.internal.runtime.regexp.joni.constants.OPCode; import java.util.ArrayList; import java.util.List; @@ -231,7 +229,8 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } - if (lexer.token() == Token.DATABASE) { + if (lexer.token() == Token.DATABASE + || lexer.token() == Token.SCHEMA) { if (replace) { lexer.reset(markBp, markChar, Token.CREATE); } @@ -254,7 +253,7 @@ public class MySqlStatementParser extends SQLStatementParser { } if (lexer.token() == Token.VIEW - || lexer.identifierEquals("ALGORITHM")) { + || lexer.identifierEquals(FnvHash.Constants.ALGORITHM)) { if (replace) { lexer.reset(markBp, markChar, Token.CREATE); } @@ -266,14 +265,44 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.reset(markBp, markChar, Token.CREATE); return parseCreateTrigger(); } + // parse create procedure - if (lexer.token() == Token.PROCEDURE || lexer.identifierEquals("DEFINER")) { + if (lexer.token() == Token.PROCEDURE ) { if (replace) { lexer.reset(markBp, markChar, Token.CREATE); } return parseCreateProcedure(); } + if (lexer.identifierEquals(FnvHash.Constants.DEFINER)) { +// Lexer.SavePoint savePoint = lexer.mark(); + lexer.nextToken(); + accept(Token.EQ); + this.getExprParser().userName(); + + if (lexer.identifierEquals(FnvHash.Constants.SQL)) { + lexer.nextToken(); + acceptIdentifier("SECURITY"); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + lexer.nextToken(); + } + if (lexer.identifierEquals(FnvHash.Constants.EVENT)) { + lexer.reset(markBp, markChar, Token.CREATE); + return parseCreateEvent(); + } else if (lexer.token() == Token.TRIGGER) { + lexer.reset(markBp, markChar, Token.CREATE); + return parseCreateTrigger(); + } else if (lexer.token() == Token.VIEW) { + lexer.reset(markBp, markChar, Token.CREATE); + return parseCreateView(); + } else { + lexer.reset(markBp, markChar, Token.CREATE); + return parseCreateProcedure(); + } + } + if (lexer.token() == Token.FUNCTION) { if (replace) { lexer.reset(markBp, markChar, Token.CREATE); @@ -281,9 +310,167 @@ public class MySqlStatementParser extends SQLStatementParser { return parseCreateFunction(); } + if (lexer.identifierEquals(FnvHash.Constants.LOGFILE)) { + return parseCreateLogFileGroup(); + } + + if (lexer.identifierEquals(FnvHash.Constants.SERVER)) { + return parseCreateServer(); + } + + if (lexer.token() == Token.TABLESPACE) { + return parseCreateTableSpace(); + } + throw new ParserException("TODO " + lexer.info()); } + public SQLStatement parseCreateTableSpace() { + if (lexer.token() == Token.CREATE) { + accept(Token.CREATE); + } + + MySqlCreateTableSpaceStatement stmt = new MySqlCreateTableSpaceStatement(); + + accept(Token.TABLESPACE); + stmt.setName(this.exprParser.name()); + + if (lexer.identifierEquals(FnvHash.Constants.ADD)) { + lexer.nextToken(); + acceptIdentifier("DATAFILE"); + SQLExpr file = this.exprParser.primary(); + stmt.setAddDataFile(file); + } + + for (;;) { + if (lexer.identifierEquals(FnvHash.Constants.INITIAL_SIZE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr initialSize = this.exprParser.expr(); + stmt.setInitialSize(initialSize); + } else if (lexer.identifierEquals(FnvHash.Constants.FILE_BLOCK_SIZE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr fileBlockSize = this.exprParser.expr(); + stmt.setFileBlockSize(fileBlockSize); + } else if (lexer.identifierEquals(FnvHash.Constants.EXTENT_SIZE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr extentSize = this.exprParser.expr(); + stmt.setExtentSize(extentSize); + } else if (lexer.identifierEquals(FnvHash.Constants.AUTOEXTEND_SIZE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr extentSize = this.exprParser.expr(); + stmt.setAutoExtentSize(extentSize); + } else if (lexer.identifierEquals(FnvHash.Constants.MAX_SIZE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr size = this.exprParser.expr(); + stmt.setMaxSize(size); + } else if (lexer.identifierEquals(FnvHash.Constants.NODEGROUP)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr size = this.exprParser.expr(); + stmt.setNodeGroup(size); + } else if (lexer.identifierEquals(FnvHash.Constants.WAIT)) { + lexer.nextToken(); + stmt.setWait(true); + } else if (lexer.identifierEquals(FnvHash.Constants.ENGINE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr engine = this.exprParser.expr(); + stmt.setEngine(engine); + } else if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + SQLExpr comment = this.exprParser.expr(); + stmt.setComment(comment); + } else if (lexer.token() == Token.USE) { + lexer.nextToken(); + acceptIdentifier("LOGFILE"); + accept(Token.GROUP); + + SQLExpr logFileGroup = this.exprParser.expr(); + stmt.setFileBlockSize(logFileGroup); + } else { + break; + } + } + return stmt; + } + + public SQLStatement parseCreateServer() { + if (lexer.token() == Token.CREATE) { + accept(Token.CREATE); + } + + MySqlCreateServerStatement stmt = new MySqlCreateServerStatement(); + + acceptIdentifier("SERVER"); + stmt.setName(this.exprParser.name()); + + accept(Token.FOREIGN); + acceptIdentifier("DATA"); + acceptIdentifier("WRAPPER"); + stmt.setForeignDataWrapper(this.exprParser.name()); + + acceptIdentifier("OPTIONS"); + accept(Token.LPAREN); + for (;;) { + if (lexer.identifierEquals(FnvHash.Constants.HOST)) { + lexer.nextToken(); + SQLExpr host = this.exprParser.expr(); + stmt.setHost(host); + } else if (lexer.token() == Token.USER) { + lexer.nextToken(); + SQLExpr user = this.exprParser.expr(); + stmt.setUser(user); + } else if (lexer.token() == Token.DATABASE) { + lexer.nextToken(); + SQLExpr db = this.exprParser.expr(); + stmt.setDatabase(db); + } else if (lexer.identifierEquals(FnvHash.Constants.PASSWORD)) { + lexer.nextToken(); + SQLExpr pwd = this.exprParser.expr(); + stmt.setPassword(pwd); + } else if (lexer.identifierEquals(FnvHash.Constants.SOCKET)) { + lexer.nextToken(); + SQLExpr sock = this.exprParser.expr(); + stmt.setSocket(sock); + } else if (lexer.identifierEquals(FnvHash.Constants.OWNER)) { + lexer.nextToken(); + SQLExpr owner = this.exprParser.expr(); + stmt.setOwner(owner); + } else if (lexer.identifierEquals(FnvHash.Constants.PORT)) { + lexer.nextToken(); + SQLExpr port = this.exprParser.expr(); + stmt.setPort(port); + } + + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + } else { + break; + } + } + accept(Token.RPAREN); + return stmt; + } + public SQLStatement parseCreateIndex(boolean acceptCreate) { if (acceptCreate) { accept(Token.CREATE); @@ -325,7 +512,17 @@ public class MySqlStatementParser extends SQLStatementParser { } accept(Token.RPAREN); - parseCreateIndexUsing(stmt); + for (;;) { + if (lexer.identifierEquals(FnvHash.Constants.USING)) { + parseCreateIndexUsing(stmt); + } else if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + SQLExpr comment = this.exprParser.expr(); + stmt.setComment(comment); + } else { + break; + } + } return stmt; } @@ -2153,6 +2350,12 @@ public class MySqlStatementParser extends SQLStatementParser { SQLName tableName = this.exprParser.name(); insertStatement.setTableName(tableName); + if (lexer.token() == Token.HINT) { + String comment = "/*" + lexer.stringVal() + "*/"; + lexer.nextToken(); + insertStatement.getTableSource().addAfterComment(comment); + } + if (lexer.token() == Token.IDENTIFIER && !lexer.identifierEquals(FnvHash.Constants.VALUE)) { insertStatement.setAlias(lexer.stringVal()); @@ -2455,13 +2658,643 @@ public class MySqlStatementParser extends SQLStatementParser { return parseAlterTable(ignore); } - if (lexer.token() == Token.DATABASE) { + if (lexer.token() == Token.DATABASE + || lexer.token() == Token.SCHEMA) { return parseAlterDatabase(); } + if (lexer.identifierEquals(FnvHash.Constants.EVENT)) { + return parseAlterEvent(); + } + + if (lexer.token() == Token.FUNCTION) { + return parseAlterFunction(); + } + + if (lexer.token() == Token.PROCEDURE) { + return parseAlterProcedure(); + } + + if (lexer.token() == Token.TABLESPACE) { + return parseAlterTableSpace(); + } + + if (lexer.token() == Token.VIEW) { + return parseAlterView(); + } + + if (lexer.identifierEquals(FnvHash.Constants.LOGFILE)) { + return parseAlterLogFileGroup(); + } + + if (lexer.identifierEquals(FnvHash.Constants.SERVER)) { + return parseAlterServer(); + } + + if (lexer.identifierEquals(FnvHash.Constants.ALGORITHM)) { + return parseAlterView(); + } + + if (lexer.identifierEquals(FnvHash.Constants.DEFINER)) { + Lexer.SavePoint savePoint = lexer.mark(); + lexer.nextToken(); + accept(Token.EQ); + this.getExprParser().userName(); + if (lexer.identifierEquals(FnvHash.Constants.EVENT)) { + lexer.reset(savePoint); + return parseAlterEvent(); + } else { + lexer.reset(savePoint); + return parseAlterView(); + } + } + throw new ParserException("TODO " + lexer.info()); } + protected SQLStatement parseAlterView() { + if (lexer.token() == Token.ALTER) { + lexer.nextToken(); + } + + SQLAlterViewStatement createView = new SQLAlterViewStatement(getDbType()); + + if (lexer.identifierEquals("ALGORITHM")) { + lexer.nextToken(); + accept(Token.EQ); + String algorithm = lexer.stringVal(); + createView.setAlgorithm(algorithm); + lexer.nextToken(); + } + + if (lexer.identifierEquals("DEFINER")) { + lexer.nextToken(); + accept(Token.EQ); + SQLName definer = (SQLName) this.exprParser.expr(); + createView.setDefiner(definer); + } + + if (lexer.identifierEquals("SQL")) { + lexer.nextToken(); + acceptIdentifier("SECURITY"); + String sqlSecurity = lexer.stringVal(); + createView.setSqlSecurity(sqlSecurity); + lexer.nextToken(); + } + + if (lexer.identifierEquals("FORCE")) { + lexer.nextToken(); + createView.setForce(true); + } + + this.accept(Token.VIEW); + + if (lexer.token() == Token.IF || lexer.identifierEquals("IF")) { + lexer.nextToken(); + accept(Token.NOT); + accept(Token.EXISTS); + createView.setIfNotExists(true); + } + + createView.setName(exprParser.name()); + + if (lexer.token() == Token.LPAREN) { + lexer.nextToken(); + + for (;;) { + + if (lexer.token() == Token.CONSTRAINT) { + SQLTableConstraint constraint = (SQLTableConstraint) this.exprParser.parseConstaint(); + createView.addColumn(constraint); + } else { + SQLColumnDefinition column = new SQLColumnDefinition(); + column.setDbType(dbType); + SQLName expr = this.exprParser.name(); + column.setName(expr); + + this.exprParser.parseColumnRest(column); + + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + + SQLExpr comment; + if (lexer.token() == Token.LITERAL_ALIAS) { + String alias = lexer.stringVal(); + if (alias.length() > 2 && alias.charAt(0) == '"' && alias.charAt(alias.length() - 1) == '"') { + alias = alias.substring(1, alias.length() - 1); + } + comment = new SQLCharExpr(alias); + lexer.nextToken(); + } else { + comment = this.exprParser.primary(); + } + column.setComment(comment); + } + + column.setParent(createView); + createView.addColumn(column); + } + + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + } else { + break; + } + } + + accept(Token.RPAREN); + } + + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + SQLCharExpr comment = (SQLCharExpr) exprParser.primary(); + createView.setComment(comment); + } + + this.accept(Token.AS); + + SQLSelectParser selectParser = this.createSQLSelectParser(); + createView.setSubQuery(selectParser.select()); + + if (lexer.token() == Token.WITH) { + lexer.nextToken(); + + if (lexer.identifierEquals("CASCADED")) { + createView.setWithCascaded(true); + lexer.nextToken(); + } else if (lexer.identifierEquals("LOCAL")){ + createView.setWithLocal(true); + lexer.nextToken(); + } else if (lexer.identifierEquals("READ")) { + lexer.nextToken(); + accept(Token.ONLY); + createView.setWithReadOnly(true); + } + + if (lexer.token() == Token.CHECK) { + lexer.nextToken(); + acceptIdentifier("OPTION"); + createView.setWithCheckOption(true); + } + } + + return createView; + } + + protected SQLStatement parseAlterTableSpace() { + if (lexer.token() == Token.ALTER) { + lexer.nextToken(); + } + + accept(Token.TABLESPACE); + + SQLName name = this.exprParser.name(); + + MySqlAlterTablespaceStatement stmt = new MySqlAlterTablespaceStatement(); + stmt.setName(name); + + if (lexer.identifierEquals(FnvHash.Constants.ADD)) { + lexer.nextToken(); + acceptIdentifier("DATAFILE"); + SQLExpr file = this.exprParser.primary(); + stmt.setAddDataFile(file); + } else if (lexer.token() == Token.DROP) { + lexer.nextToken(); + acceptIdentifier("DATAFILE"); + SQLExpr file = this.exprParser.primary(); + stmt.setDropDataFile(file); + } + + if (lexer.identifierEquals(FnvHash.Constants.INITIAL_SIZE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr initialSize = this.exprParser.expr(); + stmt.setInitialSize(initialSize); + } + + if (lexer.identifierEquals(FnvHash.Constants.WAIT)) { + lexer.nextToken(); + stmt.setWait(true); + } + + if (lexer.identifierEquals(FnvHash.Constants.ENGINE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr engine = this.exprParser.expr(); + stmt.setEngine(engine); + } + + return stmt; + } + + protected SQLStatement parseAlterServer() { + if (lexer.token() == Token.ALTER) { + lexer.nextToken(); + } + acceptIdentifier("SERVER"); + + SQLName name = this.exprParser.name(); + + MySqlAlterServerStatement stmt = new MySqlAlterServerStatement(); + stmt.setName(name); + + acceptIdentifier("OPTIONS"); + accept(Token.LPAREN); + if (lexer.token() == Token.USER) { + lexer.nextToken(); + SQLExpr user = this.exprParser.name(); + stmt.setUser(user); + } + accept(Token.RPAREN); + + return stmt; + } + + protected SQLStatement parseCreateLogFileGroup() { + if (lexer.token() == Token.ALTER) { + lexer.nextToken(); + } + acceptIdentifier("LOGFILE"); + accept(Token.GROUP); + + SQLName name = this.exprParser.name(); + + MySqlCreateAddLogFileGroupStatement stmt = new MySqlCreateAddLogFileGroupStatement(); + stmt.setName(name); + + acceptIdentifier("ADD"); + acceptIdentifier("UNDOFILE"); + + SQLExpr fileName = this.exprParser.primary(); + stmt.setAddUndoFile(fileName); + + if (lexer.identifierEquals(FnvHash.Constants.INITIAL_SIZE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr initialSize = this.exprParser.expr(); + stmt.setInitialSize(initialSize); + } + + if (lexer.identifierEquals(FnvHash.Constants.WAIT)) { + lexer.nextToken(); + stmt.setWait(true); + } + + if (lexer.identifierEquals(FnvHash.Constants.ENGINE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr engine = this.exprParser.expr(); + stmt.setEngine(engine); + } + + return stmt; + } + + protected SQLStatement parseAlterLogFileGroup() { + if (lexer.token() == Token.ALTER) { + lexer.nextToken(); + } + acceptIdentifier("LOGFILE"); + accept(Token.GROUP); + + SQLName name = this.exprParser.name(); + + MySqlAlterLogFileGroupStatement stmt = new MySqlAlterLogFileGroupStatement(); + stmt.setName(name); + + acceptIdentifier("ADD"); + acceptIdentifier("UNDOFILE"); + + SQLExpr fileName = this.exprParser.primary(); + stmt.setAddUndoFile(fileName); + + if (lexer.identifierEquals(FnvHash.Constants.INITIAL_SIZE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr initialSize = this.exprParser.expr(); + stmt.setInitialSize(initialSize); + } + + if (lexer.identifierEquals(FnvHash.Constants.WAIT)) { + lexer.nextToken(); + stmt.setWait(true); + } + + if (lexer.identifierEquals(FnvHash.Constants.ENGINE)) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + SQLExpr engine = this.exprParser.expr(); + stmt.setEngine(engine); + } + + return stmt; + } + + protected SQLStatement parseAlterProcedure() { + if (lexer.token() == Token.ALTER) { + lexer.nextToken(); + } + accept(Token.PROCEDURE); + + SQLAlterProcedureStatement stmt = new SQLAlterProcedureStatement(); + stmt.setDbType(dbType); + + SQLName name = this.exprParser.name(); + stmt.setName(name); + + // for mysql + for (;;) { + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + SQLExpr comment = this.exprParser.primary(); + stmt.setComment(comment); + } else if (lexer.identifierEquals(FnvHash.Constants.LANGUAGE)) { + lexer.nextToken(); + acceptIdentifier("SQL"); + stmt.setLanguageSql(true); + } else if (lexer.identifierEquals(FnvHash.Constants.SQL)) { + lexer.nextToken(); + acceptIdentifier("SECURITY"); + + SQLExpr sqlSecurity = this.exprParser.name(); + stmt.setSqlSecurity(sqlSecurity); + } else if (lexer.identifierEquals(FnvHash.Constants.CONTAINS)) { + lexer.nextToken(); + acceptIdentifier("SQL"); + stmt.setContainsSql(true); + } else { + break; + } + } + + return stmt; + } + + protected SQLStatement parseAlterFunction() { + if (lexer.token() == Token.ALTER) { + lexer.nextToken(); + } + accept(Token.FUNCTION); + + SQLAlterFunctionStatement stmt = new SQLAlterFunctionStatement(); + stmt.setDbType(dbType); + + SQLName name = this.exprParser.name(); + stmt.setName(name); + + // for mysql + for (;;) { + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + SQLExpr comment = this.exprParser.primary(); + stmt.setComment(comment); + } else if (lexer.identifierEquals(FnvHash.Constants.LANGUAGE)) { + lexer.nextToken(); + acceptIdentifier("SQL"); + stmt.setLanguageSql(true); + } else if (lexer.identifierEquals(FnvHash.Constants.SQL)) { + lexer.nextToken(); + acceptIdentifier("SECURITY"); + + SQLExpr sqlSecurity = this.exprParser.name(); + stmt.setSqlSecurity(sqlSecurity); + } else if (lexer.identifierEquals(FnvHash.Constants.CONTAINS)) { + lexer.nextToken(); + acceptIdentifier("SQL"); + stmt.setContainsSql(true); + } else { + break; + } + } + + return stmt; + } + + protected SQLStatement parseCreateEvent() { + if (lexer.token() == Token.CREATE) { + lexer.nextToken(); + } + + MySqlCreateEventStatement stmt = new MySqlCreateEventStatement(); + + if (lexer.identifierEquals(FnvHash.Constants.DEFINER)) { + lexer.nextToken(); + accept(Token.EQ); + SQLName definer = this.getExprParser().userName(); + stmt.setDefiner(definer); + + if (lexer.token() == Token.LPAREN) { + lexer.nextToken(); + accept(Token.RPAREN); + } + } + + acceptIdentifier("EVENT"); + + if (lexer.token() == Token.IF) { + lexer.nextToken(); + accept(Token.NOT); + accept(Token.EXISTS); + stmt.setIfNotExists(true); + } + + SQLName eventName = this.exprParser.name(); + stmt.setName(eventName); + + while (lexer.token() == Token.ON) { + lexer.nextToken(); + if (lexer.identifierEquals(FnvHash.Constants.SCHEDULE)) { + lexer.nextToken(); + MySqlEventSchedule schedule = parseSchedule(); + stmt.setSchedule(schedule); + } else if (lexer.identifierEquals(FnvHash.Constants.COMPLETION)) { + lexer.nextToken(); + + boolean value; + if (lexer.token() == Token.NOT) { + lexer.nextToken(); + value = false; + } else { + value = true; + } + acceptIdentifier("PRESERVE"); + stmt.setOnCompletionPreserve(value); + } else { + throw new ParserException("TODO " + lexer.info()); + } + } + + if (lexer.identifierEquals(FnvHash.Constants.RENAME)) { + lexer.nextToken(); + accept(Token.TO); + SQLName renameTo = this.exprParser.name(); + stmt.setRenameTo(renameTo); + } + + if (lexer.token() == Token.ENABLE) { + stmt.setEnable(true); + lexer.nextToken(); + } else if (lexer.token() == Token.DISABLE) { + lexer.nextToken(); + stmt.setEnable(false); + + if (lexer.token() == Token.ON) { + lexer.nextToken(); + acceptIdentifier("SLAVE"); + stmt.setDisableOnSlave(true); + } + } + + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + SQLExpr comment = this.exprParser.primary(); + stmt.setComment(comment); + } + + if (lexer.token() == Token.DO) { + lexer.nextToken(); + SQLStatement eventBody = this.parseStatement(); + stmt.setEventBody(eventBody); + } else if (lexer.token() == Token.IDENTIFIER) { + SQLExpr expr = this.exprParser.expr(); + SQLExprStatement eventBody = new SQLExprStatement(expr); + eventBody.setDbType(dbType); + stmt.setEventBody(eventBody); + } + + return stmt; + } + + protected SQLStatement parseAlterEvent() { + if (lexer.token() == Token.ALTER) { + lexer.nextToken(); + } + + MySqlAlterEventStatement stmt = new MySqlAlterEventStatement(); + + if (lexer.identifierEquals(FnvHash.Constants.DEFINER)) { + lexer.nextToken(); + accept(Token.EQ); + SQLName definer = this.getExprParser().userName(); + stmt.setDefiner(definer); + } + + acceptIdentifier("EVENT"); + + SQLName eventName = this.exprParser.name(); + stmt.setName(eventName); + + while (lexer.token() == Token.ON) { + lexer.nextToken(); + if (lexer.identifierEquals(FnvHash.Constants.SCHEDULE)) { + lexer.nextToken(); + MySqlEventSchedule schedule = parseSchedule(); + stmt.setSchedule(schedule); + } else if (lexer.identifierEquals(FnvHash.Constants.COMPLETION)) { + lexer.nextToken(); + + boolean value; + if (lexer.token() == Token.NOT) { + lexer.nextToken(); + value = false; + } else { + value = true; + } + acceptIdentifier("PRESERVE"); + stmt.setOnCompletionPreserve(value); + } else { + throw new ParserException("TODO " + lexer.info()); + } + } + + if (lexer.identifierEquals(FnvHash.Constants.RENAME)) { + lexer.nextToken(); + accept(Token.TO); + SQLName renameTo = this.exprParser.name(); + stmt.setRenameTo(renameTo); + } + + if (lexer.token() == Token.ENABLE) { + stmt.setEnable(true); + lexer.nextToken(); + } else if (lexer.token() == Token.DISABLE) { + lexer.nextToken(); + stmt.setEnable(false); + + if (lexer.token() == Token.ON) { + lexer.nextToken(); + acceptIdentifier("SLAVE"); + stmt.setDisableOnSlave(true); + } + } + + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + SQLExpr comment = this.exprParser.primary(); + stmt.setComment(comment); + } + + if (lexer.token() == Token.DO) { + lexer.nextToken(); + SQLStatement eventBody = this.parseStatement(); + stmt.setEventBody(eventBody); + } else if (lexer.token() == Token.IDENTIFIER) { + SQLExpr expr = this.exprParser.expr(); + SQLExprStatement eventBody = new SQLExprStatement(expr); + eventBody.setDbType(dbType); + stmt.setEventBody(eventBody); + } + + return stmt; + } + + private MySqlEventSchedule parseSchedule() { + MySqlEventSchedule schedule = new MySqlEventSchedule(); + + if (lexer.identifierEquals(FnvHash.Constants.AT)) { + lexer.nextToken(); + schedule.setAt(this.exprParser.expr()); + } else if (lexer.identifierEquals(FnvHash.Constants.EVERY)) { + lexer.nextToken(); + SQLExpr value = this.exprParser.expr(); + String unit = lexer.stringVal(); + lexer.nextToken(); + + SQLIntervalExpr intervalExpr = new SQLIntervalExpr(); + intervalExpr.setValue(value); + intervalExpr.setUnit(SQLIntervalUnit.valueOf(unit.toUpperCase())); + + schedule.setEvery(intervalExpr); + } + + if (lexer.identifierEquals(FnvHash.Constants.STARTS)) { + lexer.nextToken(); + schedule.setStarts(this.exprParser.expr()); + + if (lexer.identifierEquals(FnvHash.Constants.ENDS)) { + lexer.nextToken(); + schedule.setEnds(this.exprParser.expr()); + } + } else if (lexer.identifierEquals(FnvHash.Constants.ENDS)) { + lexer.nextToken(); + schedule.setEnds(this.exprParser.expr()); + } + + return schedule; + } + protected SQLStatement parseAlterTable(boolean ignore) { lexer.nextToken(); @@ -2719,7 +3552,13 @@ public class MySqlStatementParser extends SQLStatementParser { stmt.addItem(item); } else if (lexer.token() == Token.DEFAULT) { - throw new ParserException("TODO " + lexer.info()); + lexer.nextToken(); + if (lexer.identifierEquals(CHARACTER)) { + SQLAlterCharacter item = alterTableCharacter(); + stmt.addItem(item); + } else { + throw new ParserException("TODO " + lexer.info()); + } } else if (lexer.identifierEquals("DISCARD")) { lexer.nextToken(); @@ -2909,17 +3748,7 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.nextToken(); } } else if (lexer.identifierEquals(CHARACTER)) { - lexer.nextToken(); - accept(Token.SET); - accept(Token.EQ); - MySqlAlterTableCharacter item = new MySqlAlterTableCharacter(); - item.setCharacterSet(this.exprParser.primary()); - if (lexer.token() == Token.COMMA) { - lexer.nextToken(); - acceptIdentifier(COLLATE2); - accept(Token.EQ); - item.setCollate(this.exprParser.primary()); - } + SQLAlterCharacter item = alterTableCharacter(); stmt.addItem(item); } else if (lexer.token() == Token.COMMENT) { lexer.nextToken(); @@ -2967,6 +3796,21 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } + private SQLAlterCharacter alterTableCharacter() { + lexer.nextToken(); + accept(Token.SET); + accept(Token.EQ); + SQLAlterCharacter item = new SQLAlterCharacter(); + item.setCharacterSet(this.exprParser.primary()); + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + acceptIdentifier(COLLATE2); + accept(Token.EQ); + item.setCollate(this.exprParser.primary()); + } + return item; + } + protected void parseAlterTableAddColumn(SQLAlterTableStatement stmt) { boolean parenFlag = false; if (lexer.token() == Token.LPAREN) { @@ -3112,7 +3956,11 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.nextToken(); } - accept(Token.DATABASE); + if (lexer.token() == Token.SCHEMA) { + lexer.nextToken(); + } else { + accept(Token.DATABASE); + } SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(JdbcConstants.MYSQL); @@ -3137,34 +3985,41 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.nextToken(); } - if (lexer.identifierEquals("CHARACTER")) { - lexer.nextToken(); - accept(Token.SET); - String charset = lexer.stringVal(); - accept(Token.IDENTIFIER); - stmt.setCharacterSet(charset); - } else if (lexer.identifierEquals("CHARSET")) { - lexer.nextToken(); - if (lexer.token() == Token.EQ) { + for (;;) { + if (lexer.identifierEquals("CHARACTER")) { lexer.nextToken(); - } - String charset = lexer.stringVal(); - accept(Token.IDENTIFIER); - stmt.setCharacterSet(charset); - } - - if (lexer.token() == Token.DEFAULT) { - lexer.nextToken(); - } - - if (lexer.identifierEquals("COLLATE")) { - lexer.nextToken(); - if (lexer.token() == Token.EQ) { + accept(Token.SET); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + String charset = lexer.stringVal(); + accept(Token.IDENTIFIER); + stmt.setCharacterSet(charset); + } else if (lexer.identifierEquals("CHARSET")) { lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + String charset = lexer.stringVal(); + accept(Token.IDENTIFIER); + stmt.setCharacterSet(charset); + } else if (lexer.token() == Token.DEFAULT) { + lexer.nextToken(); + } else if (lexer.identifierEquals("COLLATE")) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + String collate = lexer.stringVal(); + accept(Token.IDENTIFIER); + stmt.setCollate(collate); + } else { + break; } - String collate = lexer.stringVal(); - accept(Token.IDENTIFIER); - stmt.setCollate(collate); + + + + } return stmt; @@ -3186,7 +4041,11 @@ public class MySqlStatementParser extends SQLStatementParser { } public SQLStatement parseAlterDatabase() { - accept(Token.DATABASE); + if (lexer.token() == Token.SCHEMA) { + lexer.nextToken(); + } else { + accept(Token.DATABASE); + } SQLAlterDatabaseStatement stmt = new SQLAlterDatabaseStatement(); @@ -3201,6 +4060,16 @@ public class MySqlStatementParser extends SQLStatementParser { stmt.setUpgradeDataDirectoryName(true); } + if (lexer.token() == Token.DEFAULT) { + lexer.nextToken(); + if (lexer.identifierEquals(CHARACTER)) { + SQLAlterCharacter item = alterTableCharacter(); + stmt.setCharacter(item); + } else { + throw new ParserException("TODO " + lexer.info()); + } + } + return stmt; } @@ -3294,22 +4163,23 @@ public class MySqlStatementParser extends SQLStatementParser { SQLCreateProcedureStatement stmt = new SQLCreateProcedureStatement(); stmt.setDbType(dbType); - if (lexer.token() != Token.PROCEDURE) { - if (lexer.identifierEquals(FnvHash.Constants.DEFINER)) { + if (lexer.token() == Token.CREATE) { + lexer.nextToken(); + + if (lexer.token() == Token.OR) { lexer.nextToken(); - accept(Token.EQ); - SQLName definer = this.exprParser.name(); - stmt.setDefiner(definer); - } else { - accept(Token.CREATE); - if (lexer.token() == Token.OR) { - lexer.nextToken(); - accept(Token.REPLACE); - stmt.setOrReplace(true); - } + accept(Token.REPLACE); + stmt.setOrReplace(true); } } + if (lexer.identifierEquals(FnvHash.Constants.DEFINER)) { + lexer.nextToken(); + accept(Token.EQ); + SQLName definer = this.getExprParser().userName(); + stmt.setDefiner(definer); + } + accept(Token.PROCEDURE); stmt.setName(this.exprParser.name()); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java index 406e5bef2d..896ce3b12e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java @@ -15,6 +15,8 @@ */ package com.alibaba.druid.sql.dialect.mysql.visitor; +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.statement.SQLAlterCharacter; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; @@ -34,7 +36,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; -import com.alibaba.druid.sql.ast.expr.SQLIntervalExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOrderingExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; @@ -351,10 +352,6 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlAlterTableChangeColumn x); - boolean visit(MySqlAlterTableCharacter x); - - void endVisit(MySqlAlterTableCharacter x); - boolean visit(MySqlAlterTableOption x); void endVisit(MySqlAlterTableOption x); @@ -467,4 +464,19 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlFlushStatement x); + boolean visit(MySqlEventSchedule x); + void endVisit(MySqlEventSchedule x); + + boolean visit(MySqlCreateEventStatement x); + void endVisit(MySqlCreateEventStatement x); + + boolean visit(MySqlCreateAddLogFileGroupStatement x); + void endVisit(MySqlCreateAddLogFileGroupStatement x); + + boolean visit(MySqlCreateServerStatement x); + void endVisit(MySqlCreateServerStatement x); + + boolean visit(MySqlCreateTableSpaceStatement x); + void endVisit(MySqlCreateTableSpaceStatement x); + } // diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java index 2488b192f5..c7d007e354 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java @@ -15,6 +15,7 @@ */ package com.alibaba.druid.sql.dialect.mysql.visitor; +import com.alibaba.druid.sql.ast.statement.SQLAlterCharacter; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; @@ -818,12 +819,12 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq } @Override - public boolean visit(MySqlAlterTableCharacter x) { + public boolean visit(SQLAlterCharacter x) { return true; } @Override - public void endVisit(MySqlAlterTableCharacter x) { + public void endVisit(SQLAlterCharacter x) { } @@ -1127,4 +1128,54 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq } + @Override + public boolean visit(MySqlEventSchedule x) { + return true; + } + + @Override + public void endVisit(MySqlEventSchedule x) { + + } + + @Override + public boolean visit(MySqlCreateEventStatement x) { + return true; + } + + @Override + public void endVisit(MySqlCreateEventStatement x) { + + } + + @Override + public boolean visit(MySqlCreateAddLogFileGroupStatement x) { + return true; + } + + @Override + public void endVisit(MySqlCreateAddLogFileGroupStatement x) { + + } + + @Override + public boolean visit(MySqlCreateServerStatement x) { + return true; + } + + @Override + public void endVisit(MySqlCreateServerStatement x) { + + } + + @Override + public boolean visit(MySqlCreateTableSpaceStatement x) { + return false; + } + + @Override + public void endVisit(MySqlCreateTableSpaceStatement x) { + + } + } // diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index 74b51cedc2..8087ba918a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -316,12 +316,15 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV public boolean visit(SQLDataType x) { printDataType(x); - if (Boolean.TRUE == x.getAttribute("UNSIGNED")) { - print0(ucase ? " UNSIGNED" : " unsigned"); - } + if (x instanceof SQLDataTypeImpl) { + SQLDataTypeImpl dataTypeImpl = (SQLDataTypeImpl) x; + if (dataTypeImpl.isUnsigned()) { + print0(ucase ? " UNSIGNED" : " unsigned"); + } - if (Boolean.TRUE == x.getAttribute("ZEROFILL")) { - print0(ucase ? " ZEROFILL" : " zerofill"); + if (dataTypeImpl.isZerofill()) { + print0(ucase ? " ZEROFILL" : " zerofill"); + } } if (x instanceof SQLCharacterDataType) { @@ -2649,24 +2652,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } - @Override - public boolean visit(MySqlAlterTableCharacter x) { - print0(ucase ? "CHARACTER SET = " : "character set = "); - x.getCharacterSet().accept(this); - - if (x.getCollate() != null) { - print0(ucase ? ", COLLATE = " : ", collate = "); - x.getCollate().accept(this); - } - - return false; - } - - @Override - public void endVisit(MySqlAlterTableCharacter x) { - - } - @Override public boolean visit(MySqlAlterTableOption x) { print0(x.getName()); @@ -2776,7 +2761,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV printAndAccept(x.getReferencedColumns(), ", "); print(')'); - MysqlForeignKey.Match match = x.getReferenceMatch(); + SQLForeignKeyImpl.Match match = x.getReferenceMatch(); if (match != null) { print0(ucase ? " MATCH " : " match "); print0(ucase ? match.name : match.name_lcase); @@ -2787,9 +2772,9 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV print0(ucase ? x.getOnDelete().name : x.getOnDelete().name_lcase); } - if (x.getOnDelete() != null) { + if (x.getOnUpdate() != null) { print0(ucase ? " ON UPDATE " : " on update "); - print0(ucase ? x.getOnDelete().name : x.getOnDelete().name_lcase); + print0(ucase ? x.getOnUpdate().name : x.getOnUpdate().name_lcase); } return false; } @@ -3617,6 +3602,322 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } + @Override + public boolean visit(MySqlEventSchedule x) { + int cnt = 0; + if (x.getAt() != null) { + print0(ucase ? "AT " : "at "); + printExpr(x.getAt()); + + cnt++; + } + + if (x.getEvery() != null) { + print0(ucase ? "EVERY " : "every "); + SQLIntervalExpr interval = (SQLIntervalExpr) x.getEvery(); + printExpr(interval.getValue()); + print(' '); + print(interval.getUnit().name()); + + cnt++; + } + + if (x.getStarts() != null) { + if (cnt > 0) { + print(' '); + } + + print0(ucase ? "STARTS " : "starts "); + printExpr(x.getStarts()); + + cnt++; + } + + if (x.getEnds() != null) { + if (cnt > 0) { + print(' '); + } + print0(ucase ? "ENDS " : "ends "); + printExpr(x.getEnds()); + + cnt++; + } + + return false; + } + + @Override + public void endVisit(MySqlEventSchedule x) { + + } + + @Override + public boolean visit(MySqlCreateEventStatement x) { + print0(ucase ? "CREATE " : "create "); + + SQLName definer = x.getDefiner(); + if (definer != null) { + print0(ucase ? "DEFINER = " : "definer = "); + } + + print0(ucase ? "EVENT " : "evnet "); + + if (x.isIfNotExists()) { + print0(ucase ? "IF NOT EXISTS " : "if not exists "); + } + + printExpr(x.getName()); + + MySqlEventSchedule schedule = x.getSchedule(); + print0(ucase ? " ON SCHEDULE " : " on schedule "); + schedule.accept(this); + + Boolean enable = x.getEnable(); + if (enable != null) { + if (enable) { + print0(ucase ? " ENABLE" : " enable"); + } else { + print0(ucase ? " DISABLE" : " disable"); + if (x.isDisableOnSlave()) { + print0(ucase ? " ON SLAVE" : " on slave"); + } + } + } + + SQLExpr comment = x.getComment(); + if (comment != null) { + print0(ucase ? "COMMENT " : "comment "); + comment.accept(this); + } + + println(); + SQLStatement body = x.getEventBody(); + if (!(body instanceof SQLExprStatement)) { + print0(ucase ? "DO" : "do"); + println(); + } + body.accept(this); + + return false; + } + + @Override + public void endVisit(MySqlCreateEventStatement x) { + + } + + @Override + public boolean visit(MySqlCreateAddLogFileGroupStatement x) { + print0(ucase ? "CREATE LOGFILE GROUP " : "create logfile group "); + x.getName().accept(this); + print(' '); + print0(ucase ? "ADD UNDOFILE " : "add undofile "); + printExpr(x.getAddUndoFile()); + + SQLExpr initialSize = x.getInitialSize(); + if (initialSize != null) { + print0(ucase ? " INITIAL_SIZE " : " initial_size "); + printExpr(initialSize); + } + + SQLExpr undoBufferSize = x.getUndoBufferSize(); + if (undoBufferSize != null) { + print0(ucase ? " UNDO_BUFFER_SIZE " : " undo_buffer_size "); + printExpr(undoBufferSize); + } + + SQLExpr redoBufferSize = x.getRedoBufferSize(); + if (redoBufferSize != null) { + print0(ucase ? " REDO_BUFFER_SIZE " : " redo_buffer_size "); + printExpr(redoBufferSize); + } + + SQLExpr nodeGroup = x.getNodeGroup(); + if (nodeGroup != null) { + print0(ucase ? " NODEGROUP " : " nodegroup "); + printExpr(nodeGroup); + } + + if (x.isWait()) { + print0(ucase ? " WAIT" : " wait"); + } + + SQLExpr comment = x.getComment(); + if (comment != null) { + print0(ucase ? " COMMENT " : " comment "); + printExpr(comment); + } + + SQLExpr engine = x.getEngine(); + if (engine != null) { + print0(ucase ? " ENGINE " : " engine "); + printExpr(engine); + } + + return false; + } + + @Override + public void endVisit(MySqlCreateAddLogFileGroupStatement x) { + + } + + @Override + public boolean visit(MySqlCreateServerStatement x) { + print0(ucase ? "CREATE SERVER " : "create server "); + x.getName().accept(this); + print0(ucase ? " FOREIGN DATA WRAPPER " : " foreign data wrapper "); + printExpr(x.getForeignDataWrapper()); + + print(" OPTIONS("); + int cnt = 0; + SQLExpr host = x.getHost(); + if (host != null) { + print0(ucase ? "HOST " : "host "); + printExpr(host); + cnt++; + } + + SQLExpr database = x.getDatabase(); + if (database != null) { + if (cnt++ > 0) { + print(", "); + } + print0(ucase ? "DATABASE " : "database "); + printExpr(database); + } + + SQLExpr user = x.getUser(); + if (user != null) { + if (cnt++ > 0) { + print(", "); + } + print0(ucase ? "USER " : "user "); + printExpr(user); + } + + SQLExpr password = x.getPassword(); + if (password != null) { + if (cnt++ > 0) { + print(", "); + } + print0(ucase ? "PASSWORD " : "password "); + printExpr(password); + } + + SQLExpr socket = x.getSocket(); + if (socket != null) { + if (cnt++ > 0) { + print(", "); + } + print0(ucase ? "SOCKET " : "socket "); + printExpr(socket); + } + + SQLExpr owner = x.getOwner(); + if (owner != null) { + if (cnt++ > 0) { + print(", "); + } + print0(ucase ? "OWNER " : "owner "); + printExpr(owner); + } + + SQLExpr port = x.getPort(); + if (port != null) { + if (cnt++ > 0) { + print(", "); + } + print0(ucase ? "PORT " : "port "); + printExpr(port); + } + print(')'); + + return false; + } + + @Override + public void endVisit(MySqlCreateServerStatement x) { + + } + + @Override + public boolean visit(MySqlCreateTableSpaceStatement x) { + print0(ucase ? "CREATE TABLESPACE " : "create tablespace "); + x.getName().accept(this); + + SQLExpr addDataFile = x.getAddDataFile(); + if (addDataFile != null) { + print0(ucase ? " ADD DATAFILE " : " add datafile "); + addDataFile.accept(this); + } + + SQLExpr fileBlockSize = x.getFileBlockSize(); + if (fileBlockSize != null) { + print0(ucase ? " FILE_BLOCK_SIZE = " : " file_block_size = "); + fileBlockSize.accept(this); + } + + SQLExpr logFileGroup = x.getLogFileGroup(); + if (logFileGroup != null) { + print0(ucase ? " USE LOGFILE GROUP " : " use logfile group "); + logFileGroup.accept(this); + } + + SQLExpr extentSize = x.getExtentSize(); + if (extentSize != null) { + print0(ucase ? " EXTENT_SIZE = " : " extent_size = "); + extentSize.accept(this); + } + + SQLExpr initialSize = x.getInitialSize(); + if (initialSize != null) { + print0(ucase ? " INITIAL_SIZE = " : " initial_size = "); + initialSize.accept(this); + } + + SQLExpr autoExtentSize = x.getAutoExtentSize(); + if (autoExtentSize != null) { + print0(ucase ? " AUTOEXTEND_SIZE = " : " autoextend_size = "); + autoExtentSize.accept(this); + } + + SQLExpr maxSize = x.getMaxSize(); + if (autoExtentSize != null) { + print0(ucase ? " MAX_SIZE = " : " max_size = "); + maxSize.accept(this); + } + + SQLExpr nodeGroup = x.getNodeGroup(); + if (nodeGroup != null) { + print0(ucase ? " NODEGROUP = " : " nodegroup = "); + nodeGroup.accept(this); + } + + if (x.isWait()) { + print0(ucase ? " WAIT" : " wait"); + } + + SQLExpr comment = x.getComment(); + if (comment != null) { + print0(ucase ? " COMMENT " : " comment "); + printExpr(comment); + } + + SQLExpr engine = x.getEngine(); + if (engine != null) { + print0(ucase ? " ENGINE " : " engine "); + printExpr(engine); + } + + return false; + } + + @Override + public void endVisit(MySqlCreateTableSpaceStatement x) { + + } + protected void printQuery(SQLSelectQuery x) { Class clazz = x.getClass(); if (clazz == MySqlSelectQueryBlock.class) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index a107fa1e73..61acc04a60 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -38,7 +38,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; -import com.alibaba.druid.sql.ast.expr.SQLIntervalExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOrderingExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; @@ -938,12 +937,12 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS } @Override - public boolean visit(MySqlAlterTableCharacter x) { + public boolean visit(SQLAlterCharacter x) { return false; } @Override - public void endVisit(MySqlAlterTableCharacter x) { + public void endVisit(SQLAlterCharacter x) { } @@ -1255,4 +1254,54 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS public void endVisit(MySqlFlushStatement x) { } + + @Override + public boolean visit(MySqlEventSchedule x) { + return false; + } + + @Override + public void endVisit(MySqlEventSchedule x) { + + } + + @Override + public boolean visit(MySqlCreateEventStatement x) { + return false; + } + + @Override + public void endVisit(MySqlCreateEventStatement x) { + + } + + @Override + public boolean visit(MySqlCreateAddLogFileGroupStatement x) { + return false; + } + + @Override + public void endVisit(MySqlCreateAddLogFileGroupStatement x) { + + } + + @Override + public boolean visit(MySqlCreateServerStatement x) { + return false; + } + + @Override + public void endVisit(MySqlCreateServerStatement x) { + + } + + @Override + public boolean visit(MySqlCreateTableSpaceStatement x) { + return false; + } + + @Override + public void endVisit(MySqlCreateTableSpaceStatement x) { + + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/OracleToMySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/OracleToMySqlOutputVisitor.java index c83e555762..ec3fa6a946 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/OracleToMySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/OracleToMySqlOutputVisitor.java @@ -15,7 +15,7 @@ */ package com.alibaba.druid.sql.dialect.mysql.visitor; -import com.alibaba.druid.sql.ast.statement.SQLScriptCommitStatement; +import com.alibaba.druid.sql.ast.statement.SQLAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear; import com.alibaba.druid.sql.dialect.oracle.ast.clause.*; @@ -456,16 +456,6 @@ public class OracleToMySqlOutputVisitor extends MySqlOutputVisitor implements Or } - @Override - public boolean visit(OracleExprStatement x) { - return false; - } - - @Override - public void endVisit(OracleExprStatement x) { - - } - @Override public boolean visit(OracleDatetimeExpr x) { return false; @@ -536,16 +526,6 @@ public class OracleToMySqlOutputVisitor extends MySqlOutputVisitor implements Or } - @Override - public boolean visit(OracleAlterProcedureStatement x) { - return false; - } - - @Override - public void endVisit(OracleAlterProcedureStatement x) { - - } - @Override public boolean visit(OracleAlterTableDropPartition x) { return false; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterProcedureStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterProcedureStatement.java deleted file mode 100644 index ae2a8590fb..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterProcedureStatement.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 1999-2017 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.oracle.ast.stmt; - -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; - -public class OracleAlterProcedureStatement extends OracleStatementImpl implements OracleAlterStatement { - - private SQLExpr name; - - private boolean compile = false; - private boolean reuseSettings = false; - - @Override - public void accept0(OracleASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, name); - } - visitor.endVisit(this); - } - - public SQLExpr getName() { - return name; - } - - public void setName(SQLExpr name) { - this.name = name; - } - - public boolean isCompile() { - return compile; - } - - public void setCompile(boolean compile) { - this.compile = compile; - } - - public boolean isReuseSettings() { - return reuseSettings; - } - - public void setReuseSettings(boolean reuseSettings) { - this.reuseSettings = reuseSettings; - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index f3f87eaf63..4d92d93058 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -345,7 +345,8 @@ public class OracleStatementParser extends SQLStatementParser { } } - OracleExprStatement stmt = new OracleExprStatement(expr); + SQLExprStatement stmt = new SQLExprStatement(expr); + stmt.setDbType(dbType); stmt.setParent(parent); statementList.add(stmt); continue; @@ -559,7 +560,7 @@ public class OracleStatementParser extends SQLStatementParser { } if (lexer.token() == Token.SEQUENCE) { - SQLDropSequenceStatement stmt = parseDropSequece(false); + SQLDropSequenceStatement stmt = parseDropSequence(false); stmt.setParent(parent); statementList.add(stmt); continue; @@ -591,7 +592,7 @@ public class OracleStatementParser extends SQLStatementParser { if (lexer.token() == Token.NULL) { lexer.nextToken(); - OracleExprStatement stmt = new OracleExprStatement(new SQLNullExpr()); + SQLExprStatement stmt = new SQLExprStatement(new SQLNullExpr()); stmt.setParent(parent); statementList.add(stmt); continue; @@ -1145,7 +1146,7 @@ public class OracleStatementParser extends SQLStatementParser { return stmt; } else if (lexer.token() == Token.PROCEDURE) { lexer.nextToken(); - OracleAlterProcedureStatement stmt = new OracleAlterProcedureStatement(); + SQLAlterProcedureStatement stmt = new SQLAlterProcedureStatement(); stmt.setName(this.exprParser.name()); if (lexer.identifierEquals("COMPILE")) { lexer.nextToken(); @@ -1772,7 +1773,9 @@ public class OracleStatementParser extends SQLStatementParser { SQLSelect select = this.createSQLSelectParser().select(); parameter.setDefaultValue(new SQLQueryExpr(select)); - } else if (lexer.token() == Token.PROCEDURE || lexer.token() == Token.END) { + } else if (lexer.token() == Token.PROCEDURE + || lexer.token() == Token.END + || lexer.token() == Token.TABLE) { break; } else if (lexer.identifierEquals("TYPE")) { lexer.nextToken(); @@ -2563,10 +2566,23 @@ public class OracleStatementParser extends SQLStatementParser { SQLDeclareItem varItem = new SQLDeclareItem(); + boolean type = false; + if (lexer.identifierEquals(FnvHash.Constants.TYPE)) { + lexer.nextToken(); + type = true; + } + SQLName name = this.exprParser.name(); varItem.setName(name); - varItem.setDataType(this.exprParser.parseDataType(false)); + if (type) { + accept(Token.IS); + acceptIdentifier("REF"); + accept(Token.CURSOR); + varItem.setDataType(new SQLDataTypeImpl("REF CURSOR")); + } else { + varItem.setDataType(this.exprParser.parseDataType(false)); + } varItem.setParent(varDecl); varDecl.getItems().add(varItem); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java index 2c165ffa0a..a735c69c65 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java @@ -210,10 +210,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleAlterSessionStatement x); - boolean visit(OracleExprStatement x); - - void endVisit(OracleExprStatement x); - boolean visit(OracleDatetimeExpr x); void endVisit(OracleDatetimeExpr x); @@ -242,10 +238,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleExplainStatement x); - boolean visit(OracleAlterProcedureStatement x); - - void endVisit(OracleAlterProcedureStatement x); - boolean visit(OracleAlterTableDropPartition x); void endVisit(OracleAlterTableDropPartition x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java index 79a50db9ed..f2feb28e53 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java @@ -522,16 +522,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleExprStatement x) { - return true; - } - - @Override - public void endVisit(OracleExprStatement x) { - - } - @Override public boolean visit(OracleDatetimeExpr x) { return true; @@ -602,16 +592,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleAlterProcedureStatement x) { - return true; - } - - @Override - public void endVisit(OracleAlterProcedureStatement x) { - - } - @Override public boolean visit(OracleAlterTableDropPartition x) { return true; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index 23a57bb6be..949603a9ec 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -1379,17 +1379,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - @Override - public boolean visit(OracleExprStatement x) { - x.getExpr().accept(this); - return false; - } - - @Override - public void endVisit(OracleExprStatement x) { - - } - @Override public boolean visit(OracleDatetimeExpr x) { x.getExpr().accept(this); @@ -1547,7 +1536,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public boolean visit(OracleAlterProcedureStatement x) { + public boolean visit(SQLAlterProcedureStatement x) { print0(ucase ? "ALTER PROCEDURE " : "alter procedure "); x.getName().accept(this); if (x.isCompile()) { @@ -1559,11 +1548,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS return false; } - @Override - public void endVisit(OracleAlterProcedureStatement x) { - - } - @Override public boolean visit(OracleAlterTableDropPartition x) { print0(ucase ? "DROP PARTITION " : "drop partition "); @@ -2587,7 +2571,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS SQLStatement block = x.getBlock(); - if (!create) { + if (block != null && !create) { println(); print("IS"); println(); @@ -2609,7 +2593,19 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS return false; } - block.accept(this); + boolean afterSemi = false; + if (block != null) { + block.accept(this); + + if (block instanceof SQLBlockStatement + && ((SQLBlockStatement) block).getStatementList().size() > 0) { + afterSemi = ((SQLBlockStatement) block).getStatementList().get(0).isAfterSemi(); + } + } + + if ((!afterSemi) && x.getParent() instanceof OracleCreatePackageStatement) { + print(';'); + } return false; } @@ -2666,7 +2662,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS SQLStatement block = x.getBlock(); - if (!create) { + if (block != null && !create) { println(); println("IS"); } else { @@ -3199,15 +3195,16 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS this.indentCount++; - for (int i = 0, size = x.getStatements().size(); i < size; ++i) { + List statements = x.getStatements(); + for (int i = 0, size = statements.size(); i < size; ++i) { println(); - SQLStatement item = x.getStatements().get(i); - item.accept(this); + SQLStatement stmt = statements.get(i); + stmt.accept(this); } this.indentCount--; - if (x.isBody()) { + if (x.isBody() || statements.size() > 0) { println(); print0(ucase ? "END " : "end "); x.getName().accept(this); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index 127bc7754c..bd664cc030 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -23,9 +23,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.ast.expr.SQLCharExpr; -import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; -import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; +import com.alibaba.druid.sql.ast.expr.*; import com.alibaba.druid.sql.ast.statement.*; import com.alibaba.druid.sql.ast.statement.SQLMergeStatement.MergeInsertClause; import com.alibaba.druid.sql.ast.statement.SQLMergeStatement.MergeUpdateClause; @@ -198,23 +196,23 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle public boolean visit(SQLIdentifierExpr x) { String name = x.getName(); - if ("ROWNUM".equalsIgnoreCase(name)) { - return false; - } - - if ("SYSDATE".equalsIgnoreCase(name)) { - return false; - } if ("+".equalsIgnoreCase(name)) { return false; } - if ("LEVEL".equals(name)) { + long hashCode64 = x.hashCode64(); + + if (hashCode64 == FnvHash.Constants.ROWNUM + || hashCode64 == FnvHash.Constants.SYSDATE + || hashCode64 == FnvHash.Constants.LEVEL + || hashCode64 == FnvHash.Constants.SQLCODE) { return false; } - if ("SQLCODE".equalsIgnoreCase(name)) { + if (hashCode64 == FnvHash.Constants.ISOPEN + && x.getParent() instanceof SQLBinaryOpExpr + && ((SQLBinaryOpExpr) x.getParent()).getOperator() == SQLBinaryOperator.Modulus) { return false; } @@ -707,16 +705,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleExprStatement x) { - return false; - } - - @Override - public void endVisit(OracleExprStatement x) { - - } - @Override public boolean visit(OracleLockTableStatement x) { getTableStat(x.getTable()); @@ -814,16 +802,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleAlterProcedureStatement x) { - return false; - } - - @Override - public void endVisit(OracleAlterProcedureStatement x) { - - } - @Override public boolean visit(OracleAlterTableDropPartition x) { return false; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index 54e565f342..ba8b36e65c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -38,14 +38,9 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.*; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.FetchClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; -import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; -import com.alibaba.druid.sql.parser.Token; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; -import com.alibaba.druid.util.FnvHash; import com.alibaba.druid.util.JdbcConstants; -import com.alibaba.druid.util.StringUtils; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -774,16 +769,6 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor } - @Override - public boolean visit(OracleAlterProcedureStatement x) { - return false; - } - - @Override - public void endVisit(OracleAlterProcedureStatement x) { - - } - @Override public boolean visit(OracleAlterTableDropPartition x) { return false; @@ -1653,17 +1638,6 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor } - @Override - public boolean visit(OracleExprStatement x) { - x.getExpr().accept(this); - return false; - } - - @Override - public void endVisit(OracleExprStatement x) { - - } - public boolean visit(OracleRangeExpr x) { x.getLowBound().accept(this); print0(".."); diff --git a/src/main/java/com/alibaba/druid/sql/parser/Lexer.java b/src/main/java/com/alibaba/druid/sql/parser/Lexer.java index bd777a394c..0be0d513d6 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/Lexer.java +++ b/src/main/java/com/alibaba/druid/sql/parser/Lexer.java @@ -550,7 +550,7 @@ public class Lexer { return; } - if (ch == 'N') { + if (ch == 'N' || ch == 'n') { if (charAt(pos + 1) == '\'') { ++pos; ch = '\''; @@ -732,6 +732,14 @@ public class Lexer { return; } + if (ch == '\\' && charAt(pos + 1) == 'N' + && JdbcConstants.MYSQL.equals(dbType)) { + scanChar(); + scanChar(); + token = Token.NULL; + return; + } + // QS_TODO ? if (isEOF()) { // JLS token = EOF; diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index ec0ce6eaef..f59ff298c3 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -16,6 +16,7 @@ package com.alibaba.druid.sql.parser; import java.math.BigInteger; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -89,7 +90,8 @@ public class SQLExprParser extends SQLParser { } else if (token == Token.EQ) { expr = equalityRest(expr); expr = andRest(expr); - return orRest(expr); + expr = orRest(expr); + return expr; } else { return exprRest(expr); } @@ -338,13 +340,73 @@ public class SQLExprParser extends SQLParser { sqlExpr = lexer.numberExpr(); lexer.nextToken(); break; - case LITERAL_CHARS: + case LITERAL_CHARS: { sqlExpr = new SQLCharExpr(lexer.stringVal()); lexer.nextToken(); + + if (JdbcConstants.MYSQL.equals(dbType)) { + SQLMethodInvokeExpr concat = null; + for (; ; ) { + if (lexer.token == Token.LITERAL_ALIAS) { + if (concat == null) { + concat = new SQLMethodInvokeExpr("CONCAT"); + concat.addParameter(sqlExpr); + sqlExpr = concat; + } + String alias = lexer.stringVal(); + lexer.nextToken(); + SQLCharExpr concat_right = new SQLCharExpr(alias.substring(1, alias.length() - 1)); + concat.addParameter(concat_right); + } else if (lexer.token == Token.LITERAL_CHARS || lexer.token == Token.LITERAL_NCHARS) { + if (concat == null) { + concat = new SQLMethodInvokeExpr("CONCAT"); + concat.addParameter(sqlExpr); + sqlExpr = concat; + } + + String chars = lexer.stringVal(); + lexer.nextToken(); + SQLCharExpr concat_right = new SQLCharExpr(chars); + concat.addParameter(concat_right); + } else { + break; + } + } + } break; - case LITERAL_NCHARS: + } case LITERAL_NCHARS: sqlExpr = new SQLNCharExpr(lexer.stringVal()); lexer.nextToken(); + + if (JdbcConstants.MYSQL.equals(dbType)) { + SQLMethodInvokeExpr concat = null; + for (; ; ) { + if (lexer.token == Token.LITERAL_ALIAS) { + if (concat == null) { + concat = new SQLMethodInvokeExpr("CONCAT"); + concat.addParameter(sqlExpr); + sqlExpr = concat; + } + String alias = lexer.stringVal(); + lexer.nextToken(); + SQLCharExpr concat_right = new SQLCharExpr(alias.substring(1, alias.length() - 1)); + concat.addParameter(concat_right); + } else if (lexer.token == Token.LITERAL_CHARS || lexer.token == Token.LITERAL_NCHARS) { + if (concat == null) { + concat = new SQLMethodInvokeExpr("CONCAT"); + concat.addParameter(sqlExpr); + sqlExpr = concat; + } + + String chars = lexer.stringVal(); + lexer.nextToken(); + SQLCharExpr concat_right = new SQLCharExpr(chars); + concat.addParameter(concat_right); + } else { + break; + } + } + } break; case VARIANT: { String varName = lexer.stringVal(); @@ -591,6 +653,10 @@ public class SQLExprParser extends SQLParser { accept(Token.RPAREN); sqlExpr = new SQLUnaryExpr(SQLUnaryOperator.Negative, sqlExpr); break; + case BANG: + sqlExpr = expr(); + sqlExpr = new SQLUnaryExpr(SQLUnaryOperator.Negative, sqlExpr); + break; default: throw new ParserException("TODO : " + lexer.info()); } @@ -617,6 +683,10 @@ public class SQLExprParser extends SQLParser { accept(Token.RPAREN); sqlExpr = new SQLUnaryExpr(SQLUnaryOperator.Plus, sqlExpr); break; + case SUB: + sqlExpr = expr(); + sqlExpr = new SQLUnaryExpr(SQLUnaryOperator.Plus, sqlExpr); + break; default: throw new ParserException("TODO " + lexer.info()); } @@ -773,13 +843,10 @@ public class SQLExprParser extends SQLParser { return methodInvokeExpr; } - SQLAnyExpr anyExpr = new SQLAnyExpr(); SQLSelect anySubQuery = createSelectParser().select(); - anyExpr.setSubQuery(anySubQuery); + SQLAnyExpr anyExpr = new SQLAnyExpr(anySubQuery); accept(Token.RPAREN); - anySubQuery.setParent(anyExpr); - sqlExpr = anyExpr; } else { sqlExpr = new SQLIdentifierExpr("ANY"); @@ -1003,6 +1070,9 @@ public class SQLExprParser extends SQLParser { if (lexer.token == Token.STAR) { lexer.nextToken(); using = new SQLAllColumnExpr(); + } else if (lexer.token == Token.BINARY) { + using = new SQLIdentifierExpr(lexer.stringVal()); + lexer.nextToken(); } else { using = this.primary(); } @@ -1610,6 +1680,10 @@ public class SQLExprParser extends SQLParser { expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.Assignment, rightExp, dbType); } + if (lexer.token == Token.IS || lexer.token == Token.BETWEEN) { + expr = relationalRest(expr); + } + return expr; } @@ -1970,7 +2044,7 @@ public class SQLExprParser extends SQLParser { } else if (token == (Token.NOT)) { lexer.nextToken(); expr = notRationalRest(expr); - } else if (token == (Token.BETWEEN)) { + } else if (token == Token.BETWEEN) { lexer.nextToken(); SQLExpr beginExpr = bitOr(); accept(Token.AND); @@ -2051,6 +2125,11 @@ public class SQLExprParser extends SQLParser { } } + if (lexer.token == Token.IS + || lexer.token == Token.BETWEEN) { + expr = relationalRest(expr); + } + return expr; } @@ -2252,8 +2331,10 @@ public class SQLExprParser extends SQLParser { accept(Token.SET); - if (lexer.token != Token.IDENTIFIER && lexer.token != Token.LITERAL_CHARS) { - throw new ParserException(); + if (lexer.token != Token.IDENTIFIER + && lexer.token != Token.LITERAL_CHARS + && lexer.token != Token.BINARY) { + throw new ParserException(lexer.info()); } charType.setCharSetName(lexer.stringVal()); lexer.nextToken(); @@ -2347,6 +2428,18 @@ public class SQLExprParser extends SQLParser { return parseColumnRest(column); } + if (lexer.token == Token.KEY) { + lexer.nextToken(); + column.addConstraint(new SQLColumnUniqueKey()); + return parseColumnRest(column); + } + + if (lexer.token == Token.REFERENCES) { + SQLColumnReference ref = parseReference(); + column.addConstraint(ref); + return parseColumnRest(column); + } + if (lexer.token == Token.CONSTRAINT) { lexer.nextToken(); @@ -2371,13 +2464,8 @@ public class SQLExprParser extends SQLParser { } if (lexer.token == Token.REFERENCES) { - lexer.nextToken(); - SQLColumnReference ref = new SQLColumnReference(); + SQLColumnReference ref = parseReference(); ref.setName(name); - ref.setTable(this.name()); - accept(Token.LPAREN); - this.names(ref.getColumns(), ref); - accept(Token.RPAREN); column.addConstraint(ref); return parseColumnRest(column); } @@ -2434,6 +2522,82 @@ public class SQLExprParser extends SQLParser { return column; } + private SQLColumnReference parseReference() { + SQLColumnReference fk = new SQLColumnReference(); + + lexer.nextToken(); + fk.setTable(this.name()); + accept(Token.LPAREN); + this.names(fk.getColumns(), fk); + accept(Token.RPAREN); + + if (lexer.identifierEquals(FnvHash.Constants.MATCH)) { + lexer.nextToken(); + if (lexer.identifierEquals("FULL") || lexer.token() == Token.FULL) { + fk.setReferenceMatch(SQLForeignKeyImpl.Match.FULL); + lexer.nextToken(); + } else if (lexer.identifierEquals(FnvHash.Constants.PARTIAL)) { + fk.setReferenceMatch(SQLForeignKeyImpl.Match.PARTIAL); + lexer.nextToken(); + } else if (lexer.identifierEquals(FnvHash.Constants.SIMPLE)) { + fk.setReferenceMatch(SQLForeignKeyImpl.Match.SIMPLE); + lexer.nextToken(); + } else { + throw new ParserException("TODO : " + lexer.info()); + } + } + + while (lexer.token() == Token.ON) { + lexer.nextToken(); + + if (lexer.token() == Token.DELETE) { + lexer.nextToken(); + + SQLForeignKeyImpl.Option option = parseReferenceOption(); + fk.setOnDelete(option); + } else if (lexer.token() == Token.UPDATE) { + lexer.nextToken(); + + SQLForeignKeyImpl.Option option = parseReferenceOption(); + fk.setOnUpdate(option); + } else { + throw new ParserException("syntax error, expect DELETE or UPDATE, actual " + lexer.token() + " " + + lexer.info()); + } + } + + return fk; + } + + protected SQLForeignKeyImpl.Option parseReferenceOption() { + SQLForeignKeyImpl.Option option; + if (lexer.token() == Token.RESTRICT || lexer.identifierEquals(FnvHash.Constants.RESTRICT)) { + option = SQLForeignKeyImpl.Option.RESTRICT; + lexer.nextToken(); + } else if (lexer.identifierEquals(FnvHash.Constants.CASCADE)) { + option = SQLForeignKeyImpl.Option.CASCADE; + lexer.nextToken(); + } else if (lexer.token() == Token.SET) { + lexer.nextToken(); + accept(Token.NULL); + option = SQLForeignKeyImpl.Option.SET_NULL; + } else if (lexer.token() == Token.ON || lexer.identifierEquals(FnvHash.Constants.ON)) { + lexer.nextToken(); + if (lexer.identifierEquals(FnvHash.Constants.ACTION)) { + option = SQLForeignKeyImpl.Option.NO_ACTION; + lexer.nextToken(); + } else { + throw new ParserException("syntax error, expect ACTION, actual " + lexer.token() + " " + + lexer.info()); + } + } else { + throw new ParserException("syntax error, expect ACTION, actual " + lexer.token() + " " + + lexer.info()); + } + + return option; + } + protected SQLColumnCheck parseColumnCheck() { lexer.nextToken(); SQLExpr expr = this.expr(); @@ -2584,6 +2748,8 @@ public class SQLExprParser extends SQLParser { constraint = parsePrimaryKey(); } else if (lexer.token == Token.UNIQUE) { constraint = parseUnique(); + } else if (lexer.token == Token.KEY) { + constraint = parseUnique(); } else if (lexer.token == Token.FOREIGN) { constraint = parseForeignKey(); } else if (lexer.token == Token.CHECK) { @@ -2778,7 +2944,14 @@ public class SQLExprParser extends SQLParser { break; } - return new SQLSelectItem(expr, alias, connectByRoot); + SQLSelectItem selectItem = new SQLSelectItem(expr, alias, connectByRoot); + if (lexer.token == Token.HINT) { + String comment = "/*" + lexer.stringVal() + "*/"; + selectItem.addAfterComment(comment); + lexer.nextToken(); + } + + return selectItem; } public SQLExpr parseGroupingSet() { diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java index 20b6bdb216..332af0ed30 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java @@ -16,13 +16,9 @@ package com.alibaba.druid.sql.parser; public class SQLParser { - protected final Lexer lexer; - protected String dbType; - - public SQLParser(String sql, String dbType){ this(new Lexer(sql, null, dbType), dbType); this.lexer.nextToken(); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java index a59abac197..c6fe086ea0 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java @@ -663,8 +663,12 @@ public class SQLSelectParser extends SQLParser { SQLTableSource rightTableSource; if (lexer.token == Token.LPAREN) { lexer.nextToken(); - SQLSelect select = this.select(); - rightTableSource = new SQLSubqueryTableSource(select); + if (lexer.token == Token.SELECT) { + SQLSelect select = this.select(); + rightTableSource = new SQLSubqueryTableSource(select); + } else { + rightTableSource = this.parseTableSource(); + } accept(Token.RPAREN); } else { SQLExpr expr = this.expr(); @@ -677,8 +681,12 @@ public class SQLSelectParser extends SQLParser { Lexer.SavePoint savePoint = lexer.mark(); lexer.nextToken(); - if (lexer.token == Token.LPAREN - || lexer.token == Token.IDENTIFIER) { + if (lexer.token == Token.LPAREN) { + lexer.nextToken(); + join.setRight(rightTableSource); + this.exprParser.exprList(join.getUsing(), join); + accept(Token.RPAREN); + } else if (lexer.token == Token.IDENTIFIER) { lexer.reset(savePoint); join.setRight(rightTableSource); return join; diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index 2a053095c2..fd1e88203c 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.expr.*; import com.alibaba.druid.sql.ast.statement.*; import com.alibaba.druid.sql.ast.statement.SQLCreateTriggerStatement.TriggerType; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlExprParser; import com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser; import com.alibaba.druid.util.FnvHash; import com.alibaba.druid.util.JdbcConstants; @@ -367,12 +368,18 @@ public class SQLStatementParser extends SQLParser { if (lexer.token == Token.LPAREN) { char markChar = lexer.current(); int markBp = lexer.bp(); - lexer.nextToken(); + + do { + lexer.nextToken(); + } while (lexer.token == Token.LPAREN); + if (lexer.token == Token.SELECT) { lexer.reset(markBp, markChar, Token.LPAREN); SQLStatement stmt = parseSelect(); statementList.add(stmt); continue; + } else { + throw new ParserException("TODO " + lexer.info()); } } @@ -426,7 +433,7 @@ public class SQLStatementParser extends SQLParser { stmt = parseDropView(false); } else if (lexer.token == Token.TRIGGER) { stmt = parseDropTrigger(false); - } else if (lexer.token == Token.DATABASE) { + } else if (lexer.token == Token.DATABASE || lexer.token == Token.SCHEMA) { stmt = parseDropDatabase(false); } else if (lexer.token == Token.FUNCTION) { stmt = parseDropFunction(false); @@ -437,10 +444,19 @@ public class SQLStatementParser extends SQLParser { stmt = parseDropProcedure(false); } else if (lexer.token == Token.SEQUENCE) { - stmt = parseDropSequece(false); + stmt = parseDropSequence(false); + + } else if (lexer.identifierEquals(FnvHash.Constants.EVENT)) { + stmt = parseDropEvent(); + + } else if (lexer.identifierEquals(FnvHash.Constants.LOGFILE)) { + stmt = parseDropLogFileGroup(); + + } else if (lexer.identifierEquals(FnvHash.Constants.SERVER)) { + stmt = parseDropServer(); } else { - throw new ParserException("TODO " + lexer.token); + throw new ParserException("TODO " + lexer.info()); } if (beforeComments != null) { @@ -449,6 +465,80 @@ public class SQLStatementParser extends SQLParser { return stmt; } + protected SQLStatement parseDropServer() { + if (lexer.token == Token.DROP) { + lexer.nextToken(); + } + + acceptIdentifier("SERVER"); + + SQLDropServerStatement stmt = new SQLDropServerStatement(); + stmt.setDbType(dbType); + + if (lexer.token == Token.IF) { + lexer.nextToken(); + accept(Token.EXISTS); + stmt.setIfExists(true); + } + + SQLName name = this.exprParser.name(); + stmt.setName(name); + + return stmt; + } + + protected SQLStatement parseDropLogFileGroup() { + if (lexer.token == Token.DROP) { + lexer.nextToken(); + } + + acceptIdentifier("LOGFILE"); + accept(Token.GROUP); + + SQLDropLogFileGroupStatement stmt = new SQLDropLogFileGroupStatement(); + stmt.setDbType(dbType); + + SQLName name = this.exprParser.name(); + stmt.setName(name); + + if (lexer.identifierEquals(FnvHash.Constants.ENGINE)) { + lexer.nextToken(); + if (lexer.token == Token.EQ) { + lexer.nextToken(); + } + SQLExpr engine = this.exprParser.primary(); + stmt.setEngine(engine); + } + + return stmt; + } + + protected SQLStatement parseDropEvent() { + if (lexer.token == Token.DROP) { + lexer.nextToken(); + } + + acceptIdentifier("EVENT"); + + SQLDropEventStatement stmt = new SQLDropEventStatement(); + stmt.setDbType(dbType); + + if (lexer.token == Token.IF) { + lexer.nextToken(); + accept(Token.EXISTS); + stmt.setIfExists(true); + } + + SQLName name = this.exprParser.name(); + stmt.setName(name); + + return stmt; + } + + protected SQLStatement parseAlterFunction() { + throw new ParserException("TODO " + lexer.info()); + } + public SQLStatement parseKill() { throw new ParserException("not supported. " + lexer.info()); } @@ -1392,7 +1482,7 @@ public class SQLStatementParser extends SQLParser { return stmt; } - protected SQLDropSequenceStatement parseDropSequece(boolean acceptDrop) { + protected SQLDropSequenceStatement parseDropSequence(boolean acceptDrop) { if (acceptDrop) { accept(Token.DROP); } @@ -1412,10 +1502,17 @@ public class SQLStatementParser extends SQLParser { } lexer.nextToken(); + SQLDropTriggerStatement stmt = new SQLDropTriggerStatement(getDbType()); + + if (lexer.token == Token.IF) { + lexer.nextToken(); + accept(Token.EXISTS); + stmt.setIfExists(true); + } SQLName name = this.exprParser.name(); - SQLDropTriggerStatement stmt = new SQLDropTriggerStatement(getDbType()); + stmt.setName(name); return stmt; } @@ -1468,7 +1565,11 @@ public class SQLStatementParser extends SQLParser { SQLDropDatabaseStatement stmt = new SQLDropDatabaseStatement(getDbType()); - accept(Token.DATABASE); + if (lexer.token == Token.SCHEMA) { + lexer.nextToken(); + } else { + accept(Token.DATABASE); + } if (lexer.token == Token.IF) { lexer.nextToken(); @@ -1525,6 +1626,15 @@ public class SQLStatementParser extends SQLParser { SQLName name = this.exprParser.name(); stmt.setName(name); + if (lexer.identifierEquals(FnvHash.Constants.ENGINE)) { + lexer.nextToken(); + if (lexer.token == Token.EQ) { + lexer.nextToken(); + } + SQLExpr engine = this.exprParser.primary(); + stmt.setEngine(engine); + } + return stmt; } @@ -1766,6 +1876,25 @@ public class SQLStatementParser extends SQLParser { lexer.nextToken(); stmt.setTableName(this.exprParser.name()); } + + if (lexer.identifierEquals(FnvHash.Constants.ALGORITHM)) { + lexer.nextToken(); + if (lexer.token == Token.EQ) { + lexer.nextToken(); + } + SQLExpr algorithm = this.exprParser.primary(); + stmt.setAlgorithm(algorithm); + } + + if (lexer.token == Token.LOCK) { + lexer.nextToken(); + if (lexer.token == Token.EQ) { + lexer.nextToken(); + } + SQLExpr option = this.exprParser.primary(); + stmt.setLockOption(option); + } + // for mysql return stmt; } @@ -2077,6 +2206,18 @@ public class SQLStatementParser extends SQLParser { } } + if (lexer.identifierEquals(FnvHash.Constants.DEFINER)) { + lexer.nextToken(); + accept(Token.EQ); + SQLName definer = this.exprParser.name(); + stmt.setDefiner(definer); + + if (lexer.token() == Token.LPAREN) { + lexer.nextToken(); + accept(Token.RPAREN); + } + } + accept(Token.TRIGGER); @@ -2331,9 +2472,8 @@ public class SQLStatementParser extends SQLParser { if (lexer.identifierEquals("DEFINER")) { lexer.nextToken(); accept(Token.EQ); - SQLName definer = this.exprParser.name(); + SQLName definer = (SQLName) ((MySqlExprParser) this.exprParser).userName(); createView.setDefiner(definer); - lexer.nextToken(); } if (lexer.identifierEquals("SQL")) { @@ -2435,6 +2575,7 @@ public class SQLStatementParser extends SQLParser { if (lexer.token == Token.CHECK) { lexer.nextToken(); + acceptIdentifier("OPTION"); createView.setWithCheckOption(true); } } @@ -2615,6 +2756,12 @@ public class SQLStatementParser extends SQLParser { break; } accept(Token.RPAREN); + + if (lexer.token == Token.COMMENT) { + lexer.nextToken(); + SQLExpr comment = this.exprParser.primary(); + item.setComment(comment); + } return item; } diff --git a/src/main/java/com/alibaba/druid/sql/repository/SchemaRepository.java b/src/main/java/com/alibaba/druid/sql/repository/SchemaRepository.java index 9fe861c219..6cc22cc0e5 100644 --- a/src/main/java/com/alibaba/druid/sql/repository/SchemaRepository.java +++ b/src/main/java/com/alibaba/druid/sql/repository/SchemaRepository.java @@ -457,6 +457,11 @@ public class SchemaRepository { return false; } + public boolean visit(SQLAlterViewStatement x) { + acceptView(x); + return false; + } + public boolean visit(SQLCreateIndexStatement x) { acceptCreateIndex(x); return false; @@ -515,6 +520,11 @@ public class SchemaRepository { return false; } + public boolean visit(SQLAlterViewStatement x) { + acceptView(x); + return false; + } + public boolean visit(SQLCreateIndexStatement x) { acceptCreateIndex(x); return false; @@ -568,6 +578,11 @@ public class SchemaRepository { return false; } + public boolean visit(SQLAlterViewStatement x) { + acceptView(x); + return false; + } + public boolean visit(SQLCreateIndexStatement x) { acceptCreateIndex(x); return false; @@ -706,6 +721,22 @@ public class SchemaRepository { return true; } + boolean acceptView(SQLAlterViewStatement x) { + String schemaName = x.getSchema(); + + Schema schema = findSchema(schemaName, true); + + String name = x.computeName(); + SchemaObject view = schema.findTableOrView(name); + if (view != null) { + return false; + } + + SchemaObject object = new SchemaObjectImpl(name, SchemaObjectType.View, x.clone()); + schema.objects.put(object.nameHashCode64(), object); + return true; + } + boolean acceptDropIndex(SQLDropIndexStatement x) { SQLName table = x.getTableName().getName(); SchemaObject object = findTable(table); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 3941e0091a..4188be8be2 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -2225,6 +2225,17 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet return false; } + public boolean visit(SQLDropEventStatement x) { + print0(ucase ? "DROP EVENT " : "drop event "); + + if (x.isIfExists()) { + print0(ucase ? "IF EXISTS " : "if exists "); + } + + printExpr(x.getName()); + return false; + } + public boolean visit(SQLColumnDefinition x) { boolean parameterized = this.parameterized; this.parameterized = false; @@ -3011,6 +3022,38 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print0(ucase ? " ON " : " on "); table.accept(this); } + + SQLExpr algorithm = x.getAlgorithm(); + if (algorithm != null) { + print0(ucase ? " ALGORITHM " : " algorithm "); + algorithm.accept(this); + } + + SQLExpr lockOption = x.getLockOption(); + if (lockOption != null) { + print0(ucase ? " LOCK " : " lock "); + lockOption.accept(this); + } + + return false; + } + + @Override + public boolean visit(SQLDropLogFileGroupStatement x) { + print0(ucase ? "DROP LOGFILE GROUP " : "drop logfile group "); + x.getName().accept(this); + + return false; + } + + @Override + public boolean visit(SQLDropServerStatement x) { + print0(ucase ? "DROP SERVER " : "drop server "); + if (x.isIfExists()) { + print0(ucase ? "IF EXISTS " : "if exists "); + } + x.getName().accept(this); + return false; } @@ -3069,6 +3112,78 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet return false; } + @Override + public boolean visit(SQLAlterViewStatement x) { + print0(ucase ? "ALTER " : "atler "); + + this.indentCount++; + String algorithm = x.getAlgorithm(); + if (algorithm != null && algorithm.length() > 0) { + print0(ucase ? "ALGORITHM = " : "algorithm = "); + print0(algorithm); + println(); + } + + SQLName definer = x.getDefiner(); + if (definer != null) { + print0(ucase ? "DEFINER = " : "definer = "); + definer.accept(this); + println(); + } + + String sqlSecurity = x.getSqlSecurity(); + if (sqlSecurity != null && sqlSecurity.length() > 0) { + print0(ucase ? "SQL SECURITY = " : "sql security = "); + print0(sqlSecurity); + println(); + } + + this.indentCount--; + + print0(ucase ? "VIEW " : "view "); + + if (x.isIfNotExists()) { + print0(ucase ? "IF NOT EXISTS " : "if not exists "); + } + + x.getTableSource().accept(this); + + if (x.getColumns().size() > 0) { + print0(" ("); + this.indentCount++; + println(); + for (int i = 0; i < x.getColumns().size(); ++i) { + if (i != 0) { + print0(", "); + println(); + } + x.getColumns().get(i).accept(this); + } + this.indentCount--; + println(); + print(')'); + } + + if (x.getComment() != null) { + println(); + print0(ucase ? "COMMENT " : "comment "); + x.getComment().accept(this); + } + + println(); + print0(ucase ? "AS" : "as"); + println(); + + x.getSubQuery().accept(this); + + if (x.isWithCheckOption()) { + println(); + print0(ucase ? "WITH CHECK OPTION" : "with check option"); + } + + return false; + } + @Override public boolean visit(SQLCreateViewStatement x) { print0(ucase ? "CREATE " : "create "); @@ -3475,6 +3590,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print0(x.getUsing()); } + SQLExpr comment = x.getComment(); + if (comment != null) { + print0(ucase ? " COMMENT " : " comment "); + comment.accept(this); + } + return false; } @@ -3525,6 +3646,23 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print0(" ("); printAndAccept(x.getColumns(), ", "); print(')'); + + SQLForeignKeyImpl.Match match = x.getReferenceMatch(); + if (match != null) { + print0(ucase ? " MATCH " : " match "); + print0(ucase ? match.name : match.name_lcase); + } + + if (x.getOnDelete() != null) { + print0(ucase ? " ON DELETE " : " on delete "); + print0(ucase ? x.getOnDelete().name : x.getOnDelete().name_lcase); + } + + if (x.getOnUpdate() != null) { + print0(ucase ? " ON UPDATE " : " on update "); + print0(ucase ? x.getOnUpdate().name : x.getOnUpdate().name_lcase); + } + return false; } @@ -3759,6 +3897,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet x.getName().accept(this); + SQLExpr engine = x.getEngine(); + if (engine != null) { + print0(ucase ? " ENGINE " : " engine "); + engine.accept(this); + } + return false; } @@ -3816,6 +3960,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print0(ucase ? " USING " : " using "); print0(x.getUsing()); } + + SQLExpr comment = x.getComment(); + if (comment != null) { + print0(ucase ? " COMMENT " : " comment "); + printExpr(comment); + } return false; } @@ -4751,6 +4901,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet if (x.isUpgradeDataDirectoryName()) { print0(ucase ? " UPGRADE DATA DIRECTORY NAME" : " upgrade data directory name"); } + + SQLAlterCharacter character = x.getCharacter(); + if (character != null) { + print(' '); + character.accept(this); + } return false; } @@ -5483,4 +5639,23 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print0(ucase ? "SHOW ERRORS" : "show errors"); return true; } + + @Override + public boolean visit(SQLAlterCharacter x) { + print0(ucase ? "CHARACTER SET = " : "character set = "); + x.getCharacterSet().accept(this); + + if (x.getCollate() != null) { + print0(ucase ? ", COLLATE = " : ", collate = "); + x.getCollate().accept(this); + } + + return false; + } + + @Override + public boolean visit(SQLExprStatement x) { + x.getExpr().accept(this); + return false; + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java index b177555b34..63cb0db0c6 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -769,4 +769,25 @@ public interface SQLASTVisitor { boolean visit(SQLShowErrorsStatement x); void endVisit(SQLShowErrorsStatement x); + + boolean visit(SQLAlterCharacter x); + void endVisit(SQLAlterCharacter x); + + boolean visit(SQLExprStatement x); + void endVisit(SQLExprStatement x); + + boolean visit(SQLAlterProcedureStatement x); + void endVisit(SQLAlterProcedureStatement x); + + boolean visit(SQLAlterViewStatement x); + void endVisit(SQLAlterViewStatement x); + + boolean visit(SQLDropEventStatement x); + void endVisit(SQLDropEventStatement x); + + boolean visit(SQLDropLogFileGroupStatement x); + void endVisit(SQLDropLogFileGroupStatement x); + + boolean visit(SQLDropServerStatement x); + void endVisit(SQLDropServerStatement x); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java index 417ccec056..71b7792f3f 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -315,6 +315,13 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public void endVisit(SQLCreateViewStatement x) { } + public boolean visit(SQLAlterViewStatement x) { + return true; + } + + public void endVisit(SQLAlterViewStatement x) { + } + public boolean visit(SQLCreateViewStatement.Column x) { return true; } @@ -1769,6 +1776,66 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { } + @Override + public boolean visit(SQLAlterCharacter x) { + return true; + } + + @Override + public void endVisit(SQLAlterCharacter x) { + + } + + @Override + public boolean visit(SQLExprStatement x) { + return true; + } + + @Override + public void endVisit(SQLExprStatement x) { + + } + + @Override + public boolean visit(SQLAlterProcedureStatement x) { + return true; + } + + @Override + public void endVisit(SQLAlterProcedureStatement x) { + + } + + @Override + public boolean visit(SQLDropEventStatement x) { + return true; + } + + @Override + public void endVisit(SQLDropEventStatement x) { + + } + + @Override + public boolean visit(SQLDropLogFileGroupStatement x) { + return true; + } + + @Override + public void endVisit(SQLDropLogFileGroupStatement x) { + + } + + @Override + public boolean visit(SQLDropServerStatement x) { + return true; + } + + @Override + public void endVisit(SQLDropServerStatement x) { + + } + public final boolean isEnabled(VisitorFeature feature) { return VisitorFeature.isEnabled(this.features, feature); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index 076fa7b028..a6fe34e132 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -538,7 +538,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { handleRelationship(left, x.getOperator().name, right); break; - case BooleanOr:{ + case BooleanOr: { List list = SQLBinaryOpExpr.split(x, op); for (SQLExpr item : list) { @@ -551,6 +551,15 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return false; } + case Modulus: + if (right instanceof SQLIdentifierExpr) { + long hashCode64 = ((SQLIdentifierExpr) right).hashCode64(); + if (hashCode64 == FnvHash.Constants.ISOPEN) { + left.accept(this); + return false; + } + } + break; default: break; } @@ -1834,6 +1843,16 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return false; } + public boolean visit(SQLAlterViewStatement x) { + if (repository != null + && x.getParent() == null) { + repository.resolve(x); + } + + x.getSubQuery().accept(this); + return false; + } + @Override public boolean visit(SQLAlterTableDropForeignKey x) { return false; @@ -2376,4 +2395,17 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { public boolean visit(SQLAlterTypeStatement x) { return false; } + public boolean visit(SQLAlterProcedureStatement x) { + return false; + } + + public boolean visit(SQLExprStatement x) { + SQLExpr expr = x.getExpr(); + + if (expr instanceof SQLName) { + return false; + } + + return true; + } } diff --git a/src/main/java/com/alibaba/druid/util/FnvHash.java b/src/main/java/com/alibaba/druid/util/FnvHash.java index 36adbe872d..6415d726c3 100644 --- a/src/main/java/com/alibaba/druid/util/FnvHash.java +++ b/src/main/java/com/alibaba/druid/util/FnvHash.java @@ -405,6 +405,7 @@ public final class FnvHash { long LEVEL = fnv1a_64_lower("LEVEL"); long CONNECT_BY_ISCYCLE = fnv1a_64_lower("CONNECT_BY_ISCYCLE"); long CURRENT_TIMESTAMP = fnv1a_64_lower("CURRENT_TIMESTAMP"); + long CURRENT_USER = fnv1a_64_lower("CURRENT_USER"); long FALSE = fnv1a_64_lower("FALSE"); long TRUE = fnv1a_64_lower("TRUE"); long SET = fnv1a_64_lower("SET"); @@ -415,12 +416,15 @@ public final class FnvHash { long LONG_RAW = fnv1a_64_lower("LONG RAW"); long LONG = fnv1a_64_lower("LONG"); long ROWNUM = fnv1a_64_lower("ROWNUM"); + long SYSDATE = fnv1a_64_lower("SYSDATE"); + long SQLCODE = fnv1a_64_lower("SQLCODE"); long PRECISION = fnv1a_64_lower("PRECISION"); long DOUBLE = fnv1a_64_lower("DOUBLE"); long DOUBLE_PRECISION = fnv1a_64_lower("DOUBLE PRECISION"); long WITHOUT = fnv1a_64_lower("WITHOUT"); long DEFINER = fnv1a_64_lower("DEFINER"); + long EVENT = fnv1a_64_lower("EVENT"); long DETERMINISTIC = fnv1a_64_lower("DETERMINISTIC"); long CONTAINS = fnv1a_64_lower("CONTAINS"); long SQL = fnv1a_64_lower("SQL"); @@ -506,6 +510,9 @@ public final class FnvHash { long OFF = fnv1a_64_lower("OFF"); long IDENTITY_INSERT = fnv1a_64_lower("IDENTITY_INSERT"); long PASSWORD = fnv1a_64_lower("PASSWORD"); + long SOCKET = fnv1a_64_lower("SOCKET"); + long OWNER = fnv1a_64_lower("OWNER"); + long PORT = fnv1a_64_lower("PORT"); long PUBLIC = fnv1a_64_lower("PUBLIC"); long MATERIALIZED = fnv1a_64_lower("MATERIALIZED"); long BITMAP = fnv1a_64_lower("BITMAP"); @@ -530,5 +537,27 @@ public final class FnvHash { long DEPTH = fnv1a_64_lower("DEPTH"); long BREADTH = fnv1a_64_lower("BREADTH"); + + long SCHEDULE = fnv1a_64_lower("SCHEDULE"); + long COMPLETION = fnv1a_64_lower("COMPLETION"); + long RENAME = fnv1a_64_lower("RENAME"); + long AT = fnv1a_64_lower("AT"); + long LANGUAGE = fnv1a_64_lower("LANGUAGE"); + long LOGFILE = fnv1a_64_lower("LOGFILE"); + long INITIAL_SIZE = fnv1a_64_lower("INITIAL_SIZE"); + long MAX_SIZE = fnv1a_64_lower("MAX_SIZE"); + long NODEGROUP = fnv1a_64_lower("NODEGROUP"); + long EXTENT_SIZE = fnv1a_64_lower("EXTENT_SIZE"); + long AUTOEXTEND_SIZE = fnv1a_64_lower("AUTOEXTEND_SIZE"); + long FILE_BLOCK_SIZE = fnv1a_64_lower("FILE_BLOCK_SIZE"); + long SERVER = fnv1a_64_lower("SERVER"); + long HOST = fnv1a_64_lower("HOST"); + long ADD = fnv1a_64_lower("ADD"); + long ALGORITHM = fnv1a_64_lower("ALGORITHM"); + long EVERY = fnv1a_64_lower("EVERY"); + long STARTS = fnv1a_64_lower("STARTS"); + long ENDS = fnv1a_64_lower("ENDS"); + long BINARY = fnv1a_64_lower("BINARY"); + long ISOPEN = fnv1a_64_lower("ISOPEN"); } } diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index f6cb885a11..b346e2b4f5 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -846,10 +846,6 @@ public class WallVisitorUtils { return; } - String tableName = x.getTableName().getSimpleName(); - Set updateCheckColumns = config.getUpdateCheckTable(tableName); - boolean isUpdateCheckTable = updateCheckColumns != null && !updateCheckColumns.isEmpty(); - SQLExpr where = x.getWhere(); if (where == null) { WallContext context = WallContext.current(); @@ -878,6 +874,15 @@ public class WallVisitorUtils { } } + SQLName table = x.getTableName(); + if (table == null) { + return; + } + + String tableName = table.getSimpleName(); + Set updateCheckColumns = config.getUpdateCheckTable(tableName); + boolean isUpdateCheckTable = updateCheckColumns != null && !updateCheckColumns.isEmpty(); + WallUpdateCheckHandler updateCheckHandler = config.getUpdateCheckHandler(); if (isUpdateCheckTable && updateCheckHandler != null) { String checkColumn = updateCheckColumns.iterator().next(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/AntlrMySqlTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/AntlrMySqlTest.java new file mode 100644 index 0000000000..408682fdc1 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/AntlrMySqlTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.mysql; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.net.URL; + +public class AntlrMySqlTest extends TestCase { + public void test_for_antlr_examples() throws Exception { + String path = "bvt/parser/antlr_grammers_v4_mysql/examples/"; + URL resource = Thread.currentThread().getContextClassLoader().getResource(path); + File dir = new File(resource.getFile()); + for (File file : dir.listFiles()) { + System.out.println(file); + String sql = FileUtils.readFileToString(file); + SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java index 99a5b689a5..ce5df827ee 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java @@ -15,7 +15,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableCharacter; +import com.alibaba.druid.sql.ast.statement.SQLAlterCharacter; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableDiscardTablespace; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableImportTablespace; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableModifyColumn; @@ -161,7 +161,7 @@ public class MySqlASTVisitorAdapterTest extends TestCase { new MySqlUnlockTablesStatement().accept(adapter); new MySqlForceIndexHint().accept(adapter); new MySqlAlterTableChangeColumn().accept(adapter); - new MySqlAlterTableCharacter().accept(adapter); + new SQLAlterCharacter().accept(adapter); new MySqlAlterTableOption().accept(adapter); new MySqlCreateTableStatement().accept(adapter); new MySqlCharExpr().accept(adapter); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/alter/MySqlAlterViewTest_0.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/alter/MySqlAlterViewTest_0.java new file mode 100644 index 0000000000..12dca99174 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/alter/MySqlAlterViewTest_0.java @@ -0,0 +1,44 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.alter; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.parser.Token; +import junit.framework.TestCase; + +public class MySqlAlterViewTest_0 extends TestCase { + + public void test_alter_first() throws Exception { + String sql = "alter definer = 'ivan'@'%' view my_view3 as select count(*) from t3;"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + assertEquals("ALTER DEFINER = 'ivan'@'%'\n" + + "\tVIEW my_view3\n" + + "AS\n" + + "SELECT COUNT(*)\n" + + "FROM t3;", SQLUtils.toMySqlString(stmt)); + assertEquals("atler definer = 'ivan'@'%'\n" + + "\tview my_view3\n" + + "as\n" + + "select count(*)\n" + + "from t3;", SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION)); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateAddLogFileGroupTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateAddLogFileGroupTest.java new file mode 100644 index 0000000000..a1607c3b05 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateAddLogFileGroupTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class MySqlCreateAddLogFileGroupTest extends MysqlTest { + + @Test + public void test_one() throws Exception { + String sql = "CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' INITIAL_SIZE = 10M ENGINE = InnoDB;"; + + List stmtList = SQLUtils.toStatementList(sql, JdbcConstants.MYSQL); + + SQLStatement stmt = stmtList.get(0); + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' INITIAL_SIZE 10M ENGINE InnoDB;", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateDatabaseTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateDatabaseTest4.java new file mode 100644 index 0000000000..8df6578914 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateDatabaseTest4.java @@ -0,0 +1,44 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class MySqlCreateDatabaseTest4 extends MysqlTest { + + @Test + public void test_one() throws Exception { + String sql = "create database super default character set utf8 collate = utf8_bin character set utf8 collate utf8_bin;"; + + List stmtList = SQLUtils.toStatementList(sql, JdbcConstants.MYSQL); + + SQLStatement stmt = stmtList.get(0); + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE DATABASE super CHARACTER SET utf8 COLLATE utf8_bin;", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateEventTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateEventTest.java new file mode 100644 index 0000000000..cc7bf1dc53 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateEventTest.java @@ -0,0 +1,52 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class MySqlCreateEventTest extends MysqlTest { + + @Test + public void test_one() throws Exception { + String sql = "create definer = current_user event if not exists someevent on schedule at current_timestamp + interval 30 minute\n" + + "on completion preserve do begin insert into test.t1 values (33), (111);select * from test.t1; end; -- //"; + + List stmtList = SQLUtils.toStatementList(sql, JdbcConstants.MYSQL); + + SQLStatement stmt = stmtList.get(0); + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE DEFINER = EVENT IF NOT EXISTS someevent ON SCHEDULE AT current_timestamp + INTERVAL 30 MINUTE\n" + + "DO\n" + + "BEGIN\n" + + "\tINSERT INTO test.t1\n" + + "\tVALUES (33),\n" + + "\t\t(111);\n" + + "\tSELECT *\n" + + "\tFROM test.t1;\n" + + "END;", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateEventTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateEventTest1.java new file mode 100644 index 0000000000..f14e8ebb8b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateEventTest1.java @@ -0,0 +1,49 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class MySqlCreateEventTest1 extends MysqlTest { + + @Test + public void test_one() throws Exception { + String sql = "create definer = 'ivan'@'%' event testevent1 on schedule every 1 hour ends '2016-11-05 23:59:00'\n" + + "do begin select * from test.t2; end; -- //"; + + List stmtList = SQLUtils.toStatementList(sql, JdbcConstants.MYSQL); + + SQLStatement stmt = stmtList.get(0); + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE DEFINER = EVENT testevent1 ON SCHEDULE EVERY 1 HOUR ENDS '2016-11-05 23:59:00'\n" + + "DO\n" + + "BEGIN\n" + + "\tSELECT *\n" + + "\tFROM test.t2;\n" + + "END;", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateIndexTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateIndexTest.java new file mode 100644 index 0000000000..620f343148 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateIndexTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class MySqlCreateIndexTest extends MysqlTest { + + @Test + public void test_one() throws Exception { + String sql = "create index index1 on t1(col1) comment 'test index' comment 'some test' using btree;"; + + List stmtList = SQLUtils.toStatementList(sql, JdbcConstants.MYSQL); + + SQLStatement stmt = stmtList.get(0); + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE INDEX index1 ON t1 (col1) USING BTREE COMMENT 'some test';", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateServerTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateServerTest.java new file mode 100644 index 0000000000..cd14df3e54 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateServerTest.java @@ -0,0 +1,47 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class MySqlCreateServerTest extends MysqlTest { + + @Test + public void test_one() throws Exception { + String sql = "-- Create server\n" + + "-- http://dev.mysql.com/doc/refman/5.6/en/create-server.html\n" + + "CREATE SERVER s\n" + + "FOREIGN DATA WRAPPER mysql\n" + + "OPTIONS (USER 'Remote', HOST '192.168.1.106', DATABASE 'test');"; + + List stmtList = SQLUtils.toStatementList(sql, JdbcConstants.MYSQL); + + SQLStatement stmt = stmtList.get(0); + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE SERVER s FOREIGN DATA WRAPPER mysql OPTIONS(HOST '192.168.1.106', DATABASE 'test', USER 'Remote');", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTableSpaceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTableSpaceTest.java new file mode 100644 index 0000000000..ab85bc6cb6 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTableSpaceTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class MySqlCreateTableSpaceTest extends MysqlTest { + + @Test + public void test_one() throws Exception { + String sql = "create tablespace tblsp1 add datafile 'tblsp_work1' use logfile group lg_1 initial_size = 4G engine MYISAM;"; + + List stmtList = SQLUtils.toStatementList(sql, JdbcConstants.MYSQL); + + SQLStatement stmt = stmtList.get(0); + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLESPACE tblsp1 FILE_BLOCK_SIZE = lg_1 INITIAL_SIZE = 4G;", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTriggerTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTriggerTest3.java new file mode 100644 index 0000000000..9f52cd74fa --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTriggerTest3.java @@ -0,0 +1,53 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import org.junit.Assert; + +import java.util.List; + +public class MySqlCreateTriggerTest3 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "-- Create trigger 1\n" + + "-- delimiter //\n" + + "create trigger trg_my1 before delete on test.t1 for each row begin insert into log_table values (\"delete row from test.t1\"); insert into t4 values (old.col1, old.col1 + 5, old.col1 + 7); end; -- //-- delimiter ;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List stmtList = parser.parseStatementList(); +// print(statementList); + + assertEquals(1, stmtList.size()); + + SQLStatement stmt = stmtList.get(0); + + assertEquals("CREATE TRIGGER trg_my1\n" + + "\tBEFORE DELETE\n" + + "\tON test.t1\n" + + "\tFOR EACH ROW\n" + + "BEGIN\n" + + "\tINSERT INTO log_table\n" + + "\tVALUES (\"delete row from test.t1\");\n" + + "\tINSERT INTO t4\n" + + "\tVALUES (old.col1, old.col1 + 5, old.col1 + 7);\n" + + "END;", stmt.toString()); + } + + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTriggerTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTriggerTest4.java new file mode 100644 index 0000000000..1bb1d2d78a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateTriggerTest4.java @@ -0,0 +1,46 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; + +import java.util.List; + +public class MySqlCreateTriggerTest4 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "create definer = current_user() trigger trg_my2 after insert on test.t2 for each row insert into log_table values (concat(\"inserted into table test.t2 values: (1c, _) = (\", cast(NEW.col1 as char(100)), \", \", convert(new.`_`, char(100)), \")\"));"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List stmtList = parser.parseStatementList(); +// print(statementList); + + assertEquals(1, stmtList.size()); + + SQLStatement stmt = stmtList.get(0); + + assertEquals("CREATE TRIGGER trg_my2\n" + + "\tAFTER INSERT\n" + + "\tON test.t2\n" + + "\tFOR EACH ROW\n" + + "INSERT INTO log_table\n" + + "VALUES (concat(\"inserted into table test.t2 values: (1c, _) = (\", CAST(NEW.col1 AS char(100)), \", \", convert(new.`_`, char(100)), \")\"));", stmt.toString()); + } + + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest1.java index 69a187eb0b..1dd7212f97 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest1.java @@ -44,7 +44,7 @@ public class MySqlCreateViewTest1 extends MysqlTest { stmt.accept(visitor); assertEquals("CREATE ALGORITHM = UNDEFINED\n" + - "\tDEFINER = root\n" + + "\tDEFINER = root@localhost\n" + "\tSQL SECURITY = DEFINER\n" + "\tVIEW view_audit_enroll\n" + "AS\n" + @@ -81,7 +81,7 @@ public class MySqlCreateViewTest1 extends MysqlTest { SQLUtils.toMySqlString(stmt)); Assert.assertEquals("create algorithm = UNDEFINED\n" + - "\tdefiner = root\n" + + "\tdefiner = root@localhost\n" + "\tsql security = DEFINER\n" + "\tview view_audit_enroll\n" + "as\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest3.java new file mode 100644 index 0000000000..7a43344502 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest3.java @@ -0,0 +1,81 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import com.alibaba.druid.stat.TableStat.Column; +import org.junit.Assert; + +import java.util.List; + +public class MySqlCreateViewTest3 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "create algorithm = merge view my_view2(col1, col2) as select * from t2 with check option;\n"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLCreateViewStatement stmt = (SQLCreateViewStatement) statementList.get(0); +// print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + assertEquals("CREATE ALGORITHM = merge\n" + + "\tVIEW my_view2 (\n" + + "\tcol1, \n" + + "\tcol2\n" + + ")\n" + + "AS\n" + + "SELECT *\n" + + "FROM t2\n" + + "WITH CHECK OPTION;", // + SQLUtils.toMySqlString(stmt)); + + Assert.assertEquals("create algorithm = merge\n" + + "\tview my_view2 (\n" + + "\tcol1, \n" + + "\tcol2\n" + + ")\n" + + "as\n" + + "select *\n" + + "from t2\n" + + "with check option;", // + SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION)); + +// System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t2"))); + + Assert.assertTrue(visitor.getColumns().contains(new Column("t2", "*"))); +// Assert.assertTrue(visitor.getColumns().contains(new Column("t2", "l_suppkey"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest4.java new file mode 100644 index 0000000000..0f66cc5eaa --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest4.java @@ -0,0 +1,73 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import com.alibaba.druid.stat.TableStat.Column; +import org.junit.Assert; + +import java.util.List; + +public class MySqlCreateViewTest4 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "create or replace definer = 'ivan'@'%' view my_view3 as select count(*) from t3;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLCreateViewStatement stmt = (SQLCreateViewStatement) statementList.get(0); +// print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + assertEquals("CREATE OR REPLACE DEFINER = 'ivan'@'%'\n" + + "\tVIEW my_view3\n" + + "AS\n" + + "SELECT COUNT(*)\n" + + "FROM t3;", // + SQLUtils.toMySqlString(stmt)); + + Assert.assertEquals("create or replace definer = 'ivan'@'%'\n" + + "\tview my_view3\n" + + "as\n" + + "select count(*)\n" + + "from t3;", // + SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION)); + +// System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t3"))); + + Assert.assertTrue(visitor.getColumns().contains(new Column("t3", "*"))); +// Assert.assertTrue(visitor.getColumns().contains(new Column("t2", "l_suppkey"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest5.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest5.java new file mode 100644 index 0000000000..306d69ce80 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateViewTest5.java @@ -0,0 +1,88 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.create; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import com.alibaba.druid.stat.TableStat.Column; +import org.junit.Assert; + +import java.util.List; + +public class MySqlCreateViewTest5 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "create or replace definer = current_user sql security invoker view my_view4(c1, 1c, _, c1_2) \n" + + "\tas select * from (t1 as tt1, t2 as tt2) inner join t1 on t1.col1 = tt1.col1;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLCreateViewStatement stmt = (SQLCreateViewStatement) statementList.get(0); +// print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + assertEquals("CREATE OR REPLACE DEFINER = current_user\n" + + "\tSQL SECURITY = invoker\n" + + "\tVIEW my_view4 (\n" + + "\tc1, \n" + + "\t1c, \n" + + "\t_, \n" + + "\tc1_2\n" + + ")\n" + + "AS\n" + + "SELECT *\n" + + "FROM (t1 tt1, t2 tt2)\n" + + "\tINNER JOIN t1 ON t1.col1 = tt1.col1;", // + SQLUtils.toMySqlString(stmt)); + + Assert.assertEquals("create or replace definer = current_user\n" + + "\tsql security = invoker\n" + + "\tview my_view4 (\n" + + "\tc1, \n" + + "\t1c, \n" + + "\t_, \n" + + "\tc1_2\n" + + ")\n" + + "as\n" + + "select *\n" + + "from (t1 tt1, t2 tt2)\n" + + "\tinner join t1 on t1.col1 = tt1.col1;", // + SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION)); + +// System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + Assert.assertEquals(1, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t1"))); + + Assert.assertTrue(visitor.getColumns().contains(new Column("t1", "col1"))); +// Assert.assertTrue(visitor.getColumns().contains(new Column("t2", "l_suppkey"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest54.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest54.java index 9d8b253496..7c858f0f1e 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest54.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest54.java @@ -125,7 +125,7 @@ public class MySqlCreateTableTest54 extends MysqlTest { + "\n\tPRIMARY KEY (`id`)," + "\n\tKEY `canvas_id` (`canvas_id`)," + "\n\tKEY `sid_ty_time` (`sellerId`, `node_type`, `start_time`)," - + "\n\tCONSTRAINT `t_activity_node_ibfk_1` FOREIGN KEY (`canvas_id`) REFERENCES `t_activity_canvas` (`id`) ON DELETE CASCADE ON UPDATE CASCADE" + + "\n\tCONSTRAINT `t_activity_node_ibfk_1` FOREIGN KEY (`canvas_id`) REFERENCES `t_activity_canvas` (`id`) ON DELETE CASCADE" + "\n) ENGINE = InnoDB CHARSET = utf8", output); } { @@ -157,7 +157,7 @@ public class MySqlCreateTableTest54 extends MysqlTest { + "\n\tprimary key (`id`)," + "\n\tkey `canvas_id` (`canvas_id`)," + "\n\tkey `sid_ty_time` (`sellerId`, `node_type`, `start_time`)," - + "\n\tconstraint `t_activity_node_ibfk_1` foreign key (`canvas_id`) references `t_activity_canvas` (`id`) on delete cascade on update cascade" + + "\n\tconstraint `t_activity_node_ibfk_1` foreign key (`canvas_id`) references `t_activity_canvas` (`id`) on delete cascade" + "\n) engine = InnoDB charset = utf8", output); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest84.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest84.java new file mode 100644 index 0000000000..ffca9e3b07 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest84.java @@ -0,0 +1,146 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.createTable; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.repository.SchemaRepository; +import com.alibaba.druid.util.JdbcConstants; + +public class MySqlCreateTableTest84 extends MysqlTest { + + public void test_one() throws Exception { + String sql = "CREATE TABLE `test` (\n" + + " `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',\n" + + " `c_tinyint` tinyint(4) DEFAULT '1' COMMENT 'tinyint',\n" + + " `c_smallint` smallint(6) DEFAULT 0 COMMENT 'smallint',\n" + + " `c_mediumint` mediumint(9) DEFAULT NULL COMMENT 'mediumint',\n" + + " `c_int` int(11) DEFAULT NULL COMMENT 'int',\n" + + " `c_bigint` bigint(20) DEFAULT NULL COMMENT 'bigint',\n" + + " `c_decimal` decimal(10,3) DEFAULT NULL COMMENT 'decimal',\n" + + " `c_date` date DEFAULT '0000-00-00' COMMENT 'date',\n" + + " `c_datetime` datetime DEFAULT '0000-00-00 00:00:00' COMMENT 'datetime',\n" + + " `c_timestamp` timestamp NULL DEFAULT NULL COMMENT 'timestamp',\n" + + " `c_time` time DEFAULT NULL COMMENT 'time',\n" + + " `c_char` char(10) DEFAULT NULL COMMENT 'char',\n" + + " `c_varchar` varchar(10) DEFAULT 'hello' COMMENT 'varchar',\n" + + " `c_blob` blob COMMENT 'blob',\n" + + " `c_text` text COMMENT 'text',\n" + + " `c_mediumtext` mediumtext COMMENT 'mediumtext',\n" + + " `c_longblob` longblob COMMENT 'longblob',\n" + + " PRIMARY KEY (`id`),\n" + + " UNIQUE KEY `uk_a` (`c_tinyint`),\n" + + " KEY `k_b` (`c_smallint`),\n" + + " KEY `k_c` (`c_mediumint`,`c_int`)\n" + + ") ENGINE=InnoDB AUTO_INCREMENT=1769503 DEFAULT CHARSET=utf8mb4 COMMENT='10000000';"; + + MySqlStatementParser parser = new MySqlStatementParser(sql, SQLParserFeature.KeepComments); + SQLStatement stmt = parser.parseCreateTable(); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); +// +// Column column = visitor.getColumn("tb_custom_vip_show_message", "custom_vip_show_message_seq"); +// assertNotNull(column); +// assertEquals("INT", column.getDataType()); + System.out.println(stmt); + + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("CREATE TABLE `test` (\n" + + "\t`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\n" + + "\t`c_tinyint` tinyint(4) DEFAULT '1' COMMENT 'tinyint',\n" + + "\t`c_smallint` smallint(6) DEFAULT 0 COMMENT 'smallint',\n" + + "\t`c_mediumint` mediumint(9) DEFAULT NULL COMMENT 'mediumint',\n" + + "\t`c_int` int(11) DEFAULT NULL COMMENT 'int',\n" + + "\t`c_bigint` bigint(20) DEFAULT NULL COMMENT 'bigint',\n" + + "\t`c_decimal` decimal(10, 3) DEFAULT NULL COMMENT 'decimal',\n" + + "\t`c_date` date DEFAULT '0000-00-00' COMMENT 'date',\n" + + "\t`c_datetime` datetime DEFAULT '0000-00-00 00:00:00' COMMENT 'datetime',\n" + + "\t`c_timestamp` timestamp NULL DEFAULT NULL COMMENT 'timestamp',\n" + + "\t`c_time` time DEFAULT NULL COMMENT 'time',\n" + + "\t`c_char` char(10) DEFAULT NULL COMMENT 'char',\n" + + "\t`c_varchar` varchar(10) DEFAULT 'hello' COMMENT 'varchar',\n" + + "\t`c_blob` blob COMMENT 'blob',\n" + + "\t`c_text` text COMMENT 'text',\n" + + "\t`c_mediumtext` mediumtext COMMENT 'mediumtext',\n" + + "\t`c_longblob` longblob COMMENT 'longblob',\n" + + "\tPRIMARY KEY (`id`),\n" + + "\tUNIQUE `uk_a` (`c_tinyint`),\n" + + "\tKEY `k_b` (`c_smallint`),\n" + + "\tKEY `k_c` (`c_mediumint`, `c_int`)\n" + + ") ENGINE = InnoDB AUTO_INCREMENT = 1769503 CHARSET = utf8mb4 COMMENT '10000000'", output); + } + + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("create table `test` (\n" + + "\t`id` bigint(20) unsigned not null auto_increment comment 'id',\n" + + "\t`c_tinyint` tinyint(4) default '1' comment 'tinyint',\n" + + "\t`c_smallint` smallint(6) default 0 comment 'smallint',\n" + + "\t`c_mediumint` mediumint(9) default null comment 'mediumint',\n" + + "\t`c_int` int(11) default null comment 'int',\n" + + "\t`c_bigint` bigint(20) default null comment 'bigint',\n" + + "\t`c_decimal` decimal(10, 3) default null comment 'decimal',\n" + + "\t`c_date` date default '0000-00-00' comment 'date',\n" + + "\t`c_datetime` datetime default '0000-00-00 00:00:00' comment 'datetime',\n" + + "\t`c_timestamp` timestamp null default null comment 'timestamp',\n" + + "\t`c_time` time default null comment 'time',\n" + + "\t`c_char` char(10) default null comment 'char',\n" + + "\t`c_varchar` varchar(10) default 'hello' comment 'varchar',\n" + + "\t`c_blob` blob comment 'blob',\n" + + "\t`c_text` text comment 'text',\n" + + "\t`c_mediumtext` mediumtext comment 'mediumtext',\n" + + "\t`c_longblob` longblob comment 'longblob',\n" + + "\tprimary key (`id`),\n" + + "\tunique `uk_a` (`c_tinyint`),\n" + + "\tkey `k_b` (`c_smallint`),\n" + + "\tkey `k_c` (`c_mediumint`, `c_int`)\n" + + ") engine = InnoDB auto_increment = 1769503 charset = utf8mb4 comment '10000000'", output); + } + + SchemaRepository repository = new SchemaRepository(JdbcConstants.MYSQL); + repository.console(sql); + assertEquals("CREATE TABLE `test` (\n" + + "\t`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\n" + + "\t`c_tinyint` tinyint(4) DEFAULT '1' COMMENT 'tinyint',\n" + + "\t`c_smallint` smallint(6) DEFAULT 0 COMMENT 'smallint',\n" + + "\t`c_mediumint` mediumint(9) DEFAULT NULL COMMENT 'mediumint',\n" + + "\t`c_int` int(11) DEFAULT NULL COMMENT 'int',\n" + + "\t`c_bigint` bigint(20) DEFAULT NULL COMMENT 'bigint',\n" + + "\t`c_decimal` decimal(10, 3) DEFAULT NULL COMMENT 'decimal',\n" + + "\t`c_date` date DEFAULT '0000-00-00' COMMENT 'date',\n" + + "\t`c_datetime` datetime DEFAULT '0000-00-00 00:00:00' COMMENT 'datetime',\n" + + "\t`c_timestamp` timestamp NULL DEFAULT NULL COMMENT 'timestamp',\n" + + "\t`c_time` time DEFAULT NULL COMMENT 'time',\n" + + "\t`c_char` char(10) DEFAULT NULL COMMENT 'char',\n" + + "\t`c_varchar` varchar(10) DEFAULT 'hello' COMMENT 'varchar',\n" + + "\t`c_blob` blob COMMENT 'blob',\n" + + "\t`c_text` text COMMENT 'text',\n" + + "\t`c_mediumtext` mediumtext COMMENT 'mediumtext',\n" + + "\t`c_longblob` longblob COMMENT 'longblob',\n" + + "\tPRIMARY KEY (`id`),\n" + + "\tUNIQUE `uk_a` (`c_tinyint`),\n" + + "\tKEY `k_b` (`c_smallint`),\n" + + "\tKEY `k_c` (`c_mediumint`, `c_int`)\n" + + ") ENGINE = InnoDB AUTO_INCREMENT = 1769503 CHARSET = utf8mb4 COMMENT '10000000'" + , repository.console("show create table test")); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest85.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest85.java new file mode 100644 index 0000000000..1327be2337 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest85.java @@ -0,0 +1,59 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.createTable; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.sql.parser.SQLParserFeature; + +public class MySqlCreateTableTest85 extends MysqlTest { + + public void test_one() throws Exception { + String sql = "create table `some table $$`(id int auto_increment key, class varchar(10), data binary) engine=MYISAM;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql, SQLParserFeature.KeepComments); + SQLStatement stmt = parser.parseCreateTable(); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); +// +// Column column = visitor.getColumn("tb_custom_vip_show_message", "custom_vip_show_message_seq"); +// assertNotNull(column); +// assertEquals("INT", column.getDataType()); + System.out.println(stmt); + + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("CREATE TABLE `some table $$` (\n" + + "\tid int UNIQUE AUTO_INCREMENT,\n" + + "\tclass varchar(10),\n" + + "\tdata binary\n" + + ") ENGINE = MYISAM", output); + } + + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("create table `some table $$` (\n" + + "\tid int unique auto_increment,\n" + + "\tclass varchar(10),\n" + + "\tdata binary\n" + + ") engine = MYISAM", output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest86.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest86.java new file mode 100644 index 0000000000..be7caa97d5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest86.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.createTable; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.sql.parser.SQLParserFeature; + +public class MySqlCreateTableTest86 extends MysqlTest { + + public void test_one() throws Exception { + String sql = "create table child_table(id int unsigned auto_increment primary key, id_parent int references parent_table(id) match full on update cascade on delete set null) engine=InnoDB;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql, SQLParserFeature.KeepComments); + SQLStatement stmt = parser.parseCreateTable(); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); +// +// Column column = visitor.getColumn("tb_custom_vip_show_message", "custom_vip_show_message_seq"); +// assertNotNull(column); +// assertEquals("INT", column.getDataType()); + System.out.println(stmt); + + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("CREATE TABLE child_table (\n" + + "\tid int UNSIGNED PRIMARY KEY AUTO_INCREMENT,\n" + + "\tid_parent int REFERENCES parent_table (id) MATCH FULL ON DELETE SET NULL ON UPDATE CASCADE\n" + + ") ENGINE = InnoDB", output); + } + + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("create table child_table (\n" + + "\tid int unsigned primary key auto_increment,\n" + + "\tid_parent int references parent_table (id) match full on delete set null on update cascade\n" + + ") engine = InnoDB", output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest87.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest87.java new file mode 100644 index 0000000000..dbfddf5eed --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest87.java @@ -0,0 +1,63 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.createTable; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.sql.parser.SQLParserFeature; + +public class MySqlCreateTableTest87 extends MysqlTest { + + public void test_one() throws Exception { + String sql = "CREATE TABLE `test_4` (\n" + + " `id` bigint(20) zerofill unsigNed NOT NULL AUTO_INCREMENT COMMENT 'id',\n" + + " `c_tinyint` tinyint(4) DEFAULT '1' COMMENT 'tinyint',\n" + + " PRIMARY KEY (`id`)\n" + + ") ENGINE=InnoDB AUTO_INCREMENT=1769531 DEFAULT CHARSET=utf8mb4 COMMENT='10000000'"; + + MySqlStatementParser parser = new MySqlStatementParser(sql, SQLParserFeature.KeepComments); + SQLStatement stmt = parser.parseCreateTable(); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); +// +// Column column = visitor.getColumn("tb_custom_vip_show_message", "custom_vip_show_message_seq"); +// assertNotNull(column); +// assertEquals("INT", column.getDataType()); + System.out.println(stmt); + + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("CREATE TABLE `test_4` (\n" + + "\t`id` bigint(20) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT COMMENT 'id',\n" + + "\t`c_tinyint` tinyint(4) DEFAULT '1' COMMENT 'tinyint',\n" + + "\tPRIMARY KEY (`id`)\n" + + ") ENGINE = InnoDB AUTO_INCREMENT = 1769531 CHARSET = utf8mb4 COMMENT '10000000'", output); + } + + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("create table `test_4` (\n" + + "\t`id` bigint(20) unsigned zerofill not null auto_increment comment 'id',\n" + + "\t`c_tinyint` tinyint(4) default '1' comment 'tinyint',\n" + + "\tprimary key (`id`)\n" + + ") engine = InnoDB auto_increment = 1769531 charset = utf8mb4 comment '10000000'", output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropIndexTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropIndexTest1.java new file mode 100644 index 0000000000..05b9493ced --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropIndexTest1.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.drop; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import org.junit.Assert; + +import java.util.List; + +public class MySqlDropIndexTest1 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "drop index index1 on t1 algorithm=default;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLDropIndexStatement stmt = (SQLDropIndexStatement) statementList.get(0); +// print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + +// System.out.println("Tables : " + visitor.getTables()); +// System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t1"))); + TableStat tableStat = visitor.getTables().get(new TableStat.Name("t1")); + Assert.assertEquals(1, tableStat.getDropIndexCount()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropIndexTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropIndexTest2.java new file mode 100644 index 0000000000..1e9cbf905e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropIndexTest2.java @@ -0,0 +1,59 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.drop; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import org.junit.Assert; + +import java.util.List; + +public class MySqlDropIndexTest2 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "drop index index2 on t2 algorithm=default lock none;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLDropIndexStatement stmt = (SQLDropIndexStatement) statementList.get(0); +// print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + assertEquals("DROP INDEX index2 ON t2 ALGORITHM DEFAULT LOCK none;", stmt.toString()); + +// System.out.println("Tables : " + visitor.getTables()); +// System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t2"))); + TableStat tableStat = visitor.getTables().get(new TableStat.Name("t2")); + Assert.assertEquals(1, tableStat.getDropIndexCount()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropTablespace.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropTablespace.java new file mode 100644 index 0000000000..f3afe4ee61 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/drop/MySqlDropTablespace.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.drop; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import org.junit.Assert; + +import java.util.List; + +public class MySqlDropTablespace extends MysqlTest { + + public void test_0() throws Exception { + String sql = "drop tablespace tblsp1 engine = NDB;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); +// print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + assertEquals("DROP TABLESPACE tblsp1 ENGINE NDB;", stmt.toString()); + +// System.out.println("Tables : " + visitor.getTables()); +// System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t2"))); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/insert/MySqlInsertTest_16_hint.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/insert/MySqlInsertTest_16_hint.java new file mode 100644 index 0000000000..376d782df3 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/insert/MySqlInsertTest_16_hint.java @@ -0,0 +1,61 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.insert; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import org.junit.Assert; + +import java.util.List; + +public class MySqlInsertTest_16_hint extends MysqlTest { + + public void test_insert_rollback_on_fail() throws Exception { + String sql = "insert into mytable /*!(col2, col3, col1) */ values (load_file('sompath'), 'str1', 2);"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + parser.setParseCompleteValues(false); + parser.setParseValuesSize(3); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + MySqlInsertStatement insertStmt = (MySqlInsertStatement) stmt; + + Assert.assertEquals(1, insertStmt.getValuesList().size()); + Assert.assertEquals(3, insertStmt.getValues().getValues().size()); + Assert.assertEquals(0, insertStmt.getColumns().size()); + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + +// System.out.println("Tables : " + visitor.getTables()); +// System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("relationships : " + visitor.getRelationships()); +// + assertTrue(visitor.containsTable("mytable")); + + String formatSql = "INSERT INTO mytable\n" + + "VALUES (load_file('sompath'), 'str1', 2);"; + Assert.assertEquals(formatSql, SQLUtils.toMySqlString(insertStmt)); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_70_nchar.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_70_nchar.java new file mode 100644 index 0000000000..c55b830e60 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_70_nchar.java @@ -0,0 +1,61 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_70_nchar extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select n'abc' as tstConstrN;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT N'abc' AS tstConstrN;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select n'abc' as tstConstrN;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT ? AS tstConstrN;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_71_concat.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_71_concat.java new file mode 100644 index 0000000000..7117c6a084 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_71_concat.java @@ -0,0 +1,61 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_71_concat extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select 'afdf' \"erwhg\" \"ads\" 'dgs' \"rter\" as tstDiffQuoteConcat;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT CONCAT('afdf', 'erwhg', 'ads', 'dgs', 'rter') AS tstDiffQuoteConcat;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select CONCAT('afdf', 'erwhg', 'ads', 'dgs', 'rter') as tstDiffQuoteConcat;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT CONCAT(?, ?, ?, ?, ?) AS tstDiffQuoteConcat;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_72_nchar.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_72_nchar.java new file mode 100644 index 0000000000..056e1dd7bc --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_72_nchar.java @@ -0,0 +1,61 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_72_nchar extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select N'abc' \"bcd\" 'asdfasdf' as tstConstNAndConcat;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT CONCAT(N'abc', 'bcd', 'asdfasdf') AS tstConstNAndConcat;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select CONCAT(n'abc', 'bcd', 'asdfasdf') as tstConstNAndConcat;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT CONCAT(?, ?, ?) AS tstConstNAndConcat;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_73_null.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_73_null.java new file mode 100644 index 0000000000..f977909100 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_73_null.java @@ -0,0 +1,61 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_73_null extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select \\N;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT NULL;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select null;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT NULL;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_74_latin.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_74_latin.java new file mode 100644 index 0000000000..54cb020954 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_74_latin.java @@ -0,0 +1,67 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_74_latin extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select * from t1 inner join (t1 as tt1, t2 as tt2) on t1.col1 = tt1.col1;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT *\n" + + "FROM t1\n" + + "\tINNER JOIN (t1 tt1, t2 tt2) ON t1.col1 = tt1.col1;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select *\n" + + "from t1\n" + + "\tinner join (t1 tt1, t2 tt2) on t1.col1 = tt1.col1;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT *\n" + + "FROM t1\n" + + "\tINNER JOIN (t1 tt1, t2 tt2) ON t1.col1 = tt1.col1;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_75_select.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_75_select.java new file mode 100644 index 0000000000..ffd9d66f66 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_75_select.java @@ -0,0 +1,61 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_75_select extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select CONVERT( LEFT( CONVERT( '自動下書き' USING binary ), 100 ) USING utf8 ) AS x_0;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT CONVERT(LEFT(CONVERT('自動下書き' USING binary), 100) USING utf8) AS x_0;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select CONVERT(LEFT(CONVERT('自動下書き' using binary), 100) using utf8) as x_0;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT CONVERT(LEFT(CONVERT(? USING binary), ?) USING utf8) AS x_0;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_76_union.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_76_union.java new file mode 100644 index 0000000000..171b656c8f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_76_union.java @@ -0,0 +1,73 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_76_union extends MysqlTest { + + public void test_0() throws Exception { + String sql = "((select 1 as a1, 10 as a2)) union all (((select 2, 20))) union distinct (select 3, 30);"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("(SELECT 1 AS a1, 10 AS a2)\n" + + "UNION ALL\n" + + "(SELECT 2, 20)\n" + + "UNION DISTINCT\n" + + "(SELECT 3, 30);", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("(select 1 as a1, 10 as a2)\n" + + "union all\n" + + "(select 2, 20)\n" + + "union distinct\n" + + "(select 3, 30);", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("(SELECT ? AS a1, ? AS a2)\n" + + "UNION ALL\n" + + "(SELECT ?, ?)\n" + + "UNION DISTINCT\n" + + "(SELECT ?, ?);", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_77_is_unkown.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_77_is_unkown.java new file mode 100644 index 0000000000..781ba342e6 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_77_is_unkown.java @@ -0,0 +1,70 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_77_is_unkown extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select 0 in (20 = any (select col1 from t1)) is not null is not unknown as t;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT 0 IN (20 = ANY (\n" + + "\t\tSELECT col1\n" + + "\t\tFROM t1\n" + + "\t)) IS NOT NULL IS NOT unknown AS t;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select 0 in (20 = any (\n" + + "\t\tselect col1\n" + + "\t\tfrom t1\n" + + "\t)) is not null is not unknown as t;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT ? IN (? = ANY (\n" + + "\t\tSELECT col1\n" + + "\t\tFROM t1\n" + + "\t)) IS NOT NULL IS NOT unknown AS t;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_78_is_unkown.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_78_is_unkown.java new file mode 100644 index 0000000000..f8dff0f74e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_78_is_unkown.java @@ -0,0 +1,70 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_78_is_unkown extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select 20 = any (select col1 from t1) is not unknown as t;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT 20 = ANY (\n" + + "\t\tSELECT col1\n" + + "\t\tFROM t1\n" + + "\t) IS NOT unknown AS t;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select 20 = any (\n" + + "\t\tselect col1\n" + + "\t\tfrom t1\n" + + "\t) is not unknown as t;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT ? = ANY (\n" + + "\t\tSELECT col1\n" + + "\t\tFROM t1\n" + + "\t) IS NOT unknown AS t;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_79_between.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_79_between.java new file mode 100644 index 0000000000..c4e203f89b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_79_between.java @@ -0,0 +1,61 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_79_between extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select 1 = 16/4 between 3 and 5 as c;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT 1 = 16 / 4 BETWEEN 3 AND 5 AS c;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select 1 = 16 / 4 between 3 and 5 as c;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT ? = ? / ? BETWEEN ? AND ? AS c;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_80_hints.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_80_hints.java new file mode 100644 index 0000000000..04e4ec06d1 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_80_hints.java @@ -0,0 +1,64 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_80_hints extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select 1 /*!, ' hello' */, 2 /*! union select 5, ' world', 10 */;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT 1 /*!, ' hello' */\n" + + "\t, 2 /*! union select 5, ' world', 10 */;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select 1 /*!, ' hello' */\n" + + "\t, 2 /*! union select 5, ' world', 10 */;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT ? /*!, ' hello' */\n" + + "\t, ? /*! union select 5, ' world', 10 */;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_81_hints.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_81_hints.java new file mode 100644 index 0000000000..d8f93fa18d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_81_hints.java @@ -0,0 +1,64 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserFeature; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class MySqlSelectTest_81_hints extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select * from t /*! where col = somefunc(col2) order by sortcol */;"; + + System.out.println(sql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL, SQLParserFeature.OptimizedForParameterized); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); + stmt.accept(visitor); + { + String output = SQLUtils.toMySqlString(stmt); + assertEquals("SELECT *\n" + + "FROM t/*! where col = somefunc(col2) order by sortcol */;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + assertEquals("select *\n" + + "from t/*! where col = somefunc(col2) order by sortcol */;", // + output); + } + + { + String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true)); + assertEquals("SELECT *\n" + + "FROM t/*! where col = somefunc(col2) order by sortcol */;", // + output); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/update/MySqlUpdateTest_11_using.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/update/MySqlUpdateTest_11_using.java new file mode 100644 index 0000000000..e32a1821b5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/update/MySqlUpdateTest_11_using.java @@ -0,0 +1,81 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql.update; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat.Column; +import com.alibaba.druid.wall.WallUtils; +import org.junit.Assert; + +import java.util.List; + +public class MySqlUpdateTest_11_using extends MysqlTest { + + public void test_0() throws Exception { + String sql = "update t1, t2, t3 inner join t4 using (col_name1, col_name2)\n" + + "set t1.value_col = t3.new_value_col, t4.`some-col*` = `t2`.`***` * 2\n" + + "where t1.pk = t2.fk_t1_pk and t2.id = t4.fk_id_entity;"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + +// System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(4, visitor.getTables().size()); + Assert.assertEquals(8, visitor.getColumns().size()); + // Assert.assertEquals(2, visitor.getConditions().size()); + + Assert.assertTrue(visitor.containsTable("t4")); + + Assert.assertTrue(visitor.getColumns().contains(new Column("t1", "value_col"))); + Assert.assertTrue(visitor.getColumns().contains(new Column("t1", "pk"))); + + { + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("UPDATE (t1, t2, t3)\n" + + "\tINNER JOIN t4 USING (col_name1, col_name2)\n" + + "SET t1.value_col = t3.new_value_col, t4.`some-col*` = `t2`.`***` * 2\n" + + "WHERE t1.pk = t2.fk_t1_pk\n" + + "\tAND t2.id = t4.fk_id_entity;", // + output); + } + { + String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + Assert.assertEquals("update (t1, t2, t3)\n" + + "\tinner join t4 using (col_name1, col_name2)\n" + + "set t1.value_col = t3.new_value_col, t4.`some-col*` = `t2`.`***` * 2\n" + + "where t1.pk = t2.fk_t1_pk\n" + + "\tand t2.id = t4.fk_id_entity;", // + output); + } + + assertTrue(WallUtils.isValidateMySql(sql)); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreatePackageTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreatePackageTest1.java new file mode 100644 index 0000000000..30be185681 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreatePackageTest1.java @@ -0,0 +1,73 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreatePackageTest1 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + "CREATE OR REPLACE PACKAGE ACHIEVE_CONTRACT_SPECIMEN IS\n" + + " -- Author : 榫氬己\n" + + " -- Created : 2011-08-07\n" + + " -- Purpose : 涓氱哗鍒掑垎鏍锋湰鍚堝悓寮傚父鍚堝悓鏇存柊\n" + + " PROCEDURE STARTUPDATE(MODULUS_ID_VALUE NUMBER);\n" + + "END ACHIEVE_CONTRACT_SPECIMEN;"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + assertEquals(1, statementList.size()); + + assertEquals("CREATE OR REPLACE PACKAGE ACHIEVE_CONTRACT_SPECIMEN\n" + + "\tPROCEDURE STARTUPDATE (\n" + + "\t\tMODULUS_ID_VALUE NUMBER\n" + + "\t)\n" + + "\t;\n" + + "END ACHIEVE_CONTRACT_SPECIMEN;",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + +// Assert.assertEquals(2, visitor.getTables().size()); +// +// Assert.assertEquals(5, visitor.getColumns().size()); +// +// Assert.assertTrue(visitor.containsColumn("employees", "employee_id")); +// Assert.assertTrue(visitor.containsColumn("employees", "*")); +// Assert.assertTrue(visitor.containsColumn("departments", "department_id")); +// Assert.assertTrue(visitor.containsColumn("employees", "salary")); +// Assert.assertTrue(visitor.containsColumn("employees", "commission_pct")); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreatePackageTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreatePackageTest2.java new file mode 100644 index 0000000000..d4f72d01f7 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreatePackageTest2.java @@ -0,0 +1,81 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import java.util.List; + +public class OracleCreatePackageTest2 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + "CREATE OR REPLACE package PKG_ECC_CAL_TASK_ACCOMPLISH\n" + + "AS\n" + + " TYPE CURSOR_CAL_TASK_ACCOMPLISH IS REF CURSOR;\n" + + " PROCEDURE ECC_CAL_TASK_ACCOMPLISH_PROC(\n" + + " p_rc OUT CURSOR_CAL_TASK_ACCOMPLISH,\n" + + " dealerID IN NUMBER,\n" + + " dealerType IN VARCHAR2,\n" + + " profitType IN NUMBER,\n" + + " profitDate IN VARCHAR2);\n" + + "end PKG_ECC_CAL_TASK_ACCOMPLISH;"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + assertEquals(1, statementList.size()); + + assertEquals("CREATE OR REPLACE PACKAGE PKG_ECC_CAL_TASK_ACCOMPLISH\n" + + "\tCURSOR_CAL_TASK_ACCOMPLISH REF CURSOR;\n" + + "\tPROCEDURE ECC_CAL_TASK_ACCOMPLISH_PROC (\n" + + "\t\tp_rc OUT CURSOR_CAL_TASK_ACCOMPLISH, \n" + + "\t\tdealerID IN NUMBER, \n" + + "\t\tdealerType IN VARCHAR2, \n" + + "\t\tprofitType IN NUMBER, \n" + + "\t\tprofitDate IN VARCHAR2\n" + + "\t)\n" + + "\t;\n" + + "END PKG_ECC_CAL_TASK_ACCOMPLISH;",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + +// Assert.assertEquals(2, visitor.getTables().size()); +// +// Assert.assertEquals(5, visitor.getColumns().size()); +// +// Assert.assertTrue(visitor.containsColumn("employees", "employee_id")); +// Assert.assertTrue(visitor.containsColumn("employees", "*")); +// Assert.assertTrue(visitor.containsColumn("departments", "department_id")); +// Assert.assertTrue(visitor.containsColumn("employees", "salary")); +// Assert.assertTrue(visitor.containsColumn("employees", "commission_pct")); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateProcedureTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateProcedureTest4.java index 3a8160bc78..8bfeae4042 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateProcedureTest4.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateProcedureTest4.java @@ -189,7 +189,7 @@ public class OracleCreateProcedureTest4 extends OracleTest { assertTrue(visitor.getTables().containsKey(new TableStat.Name("fact_brand_provider"))); - assertEquals(22, visitor.getColumns().size()); + assertEquals(23, visitor.getColumns().size()); assertEquals(6, visitor.getConditions().size()); assertEquals(4, visitor.getRelationships().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/select/OracleSelectTest97_wmsys_wmconat.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/select/OracleSelectTest97_wmsys_wmconat.java index 5e0d10f4eb..7eecf8563d 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/select/OracleSelectTest97_wmsys_wmconat.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/select/OracleSelectTest97_wmsys_wmconat.java @@ -22,6 +22,7 @@ import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; @@ -96,8 +97,13 @@ public class OracleSelectTest97_wmsys_wmconat extends OracleTest { Assert.assertEquals(1, statementList.size()); - SQLBinaryOpExpr expr = (SQLBinaryOpExpr) stmt.getSelect().getQueryBlock().getSelectList().get(0).getExpr(); - assertTrue(expr.getLeft() instanceof SQLAggregateExpr); + SQLSelectQueryBlock queryBlock = stmt.getSelect() + .getQueryBlock(); + + SQLMethodInvokeExpr nvl = (SQLMethodInvokeExpr) queryBlock.getSelectList() + .get(0).getExpr(); + SQLMethodInvokeExpr toChar =(SQLMethodInvokeExpr) nvl.getParameters().get(0); + assertTrue(toChar.getParameters().get(0) instanceof SQLAggregateExpr); OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); stmt.accept(visitor); @@ -105,8 +111,11 @@ public class OracleSelectTest97_wmsys_wmconat extends OracleTest { { String text = SQLUtils.toOracleString(stmt); - assertEquals("SELECT WMSYS.WM_CONCAT(name) + 1\n" + - "FROM emp", text); + assertEquals("SELECT NVL(TO_CHAR(WMSYS.WM_CONCAT(NVL(O.CHILD_ITEM_CODE, O.ITEM_CODE))), ?)\n" + + "FROM ECC_CPR.CCG_GTS_OSG3A_V O\n" + + "WHERE O.ENABLED_FLAG = ?\n" + + "\tAND NVL(O.PRICE, ?) = ?\n" + + "\tAND O.CONTRACT_HEADER_ID = :B1", text); } System.out.println("Tables : " + visitor.getTables()); @@ -116,8 +125,8 @@ public class OracleSelectTest97_wmsys_wmconat extends OracleTest { System.out.println("orderBy : " + visitor.getOrderByColumns()); assertEquals(1, visitor.getTables().size()); - assertEquals(1, visitor.getColumns().size()); - assertEquals(0, visitor.getConditions().size()); + assertEquals(5, visitor.getColumns().size()); + assertEquals(2, visitor.getConditions().size()); assertEquals(0, visitor.getRelationships().size()); assertEquals(0, visitor.getOrderByColumns().size()); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java index cf35ff01bf..242d55b22b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java @@ -38,7 +38,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; +import com.alibaba.druid.sql.ast.statement.SQLAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; @@ -59,7 +59,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; +import com.alibaba.druid.sql.ast.statement.SQLExprStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; @@ -142,7 +142,7 @@ public class OracleASTVisitorAdapterTest extends TestCase { new SQLBlockStatement().accept(adapter); new OracleLockTableStatement().accept(adapter); new OracleAlterSessionStatement().accept(adapter); - new OracleExprStatement().accept(adapter); + new SQLExprStatement().accept(adapter); new OracleDatetimeExpr().accept(adapter); new OracleExceptionStatement().accept(adapter); new OracleExceptionStatement.Item().accept(adapter); @@ -157,7 +157,7 @@ public class OracleASTVisitorAdapterTest extends TestCase { new SQLFetchStatement().accept(adapter); new OracleExitStatement().accept(adapter); new OracleExplainStatement().accept(adapter); - new OracleAlterProcedureStatement().accept(adapter); + new SQLAlterProcedureStatement().accept(adapter); new OracleAlterTableDropPartition().accept(adapter); new OracleAlterTableTruncatePartition().accept(adapter); new OracleAlterTableSplitPartition.TableSpaceItem().accept(adapter); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_69_mysql8_windows_function.java b/src/test/java/com/alibaba/druid/not_support/sql/mysql/MySqlSelectTest_69_mysql8_windows_function.java similarity index 95% rename from src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_69_mysql8_windows_function.java rename to src/test/java/com/alibaba/druid/not_support/sql/mysql/MySqlSelectTest_69_mysql8_windows_function.java index 10aeaa39f7..6ab451260d 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_69_mysql8_windows_function.java +++ b/src/test/java/com/alibaba/druid/not_support/sql/mysql/MySqlSelectTest_69_mysql8_windows_function.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.bvt.sql.mysql.select; +package com.alibaba.druid.not_support.sql.mysql; import com.alibaba.druid.sql.MysqlTest; import com.alibaba.druid.sql.SQLUtils; @@ -28,7 +28,7 @@ import java.util.List; public class MySqlSelectTest_69_mysql8_windows_function extends MysqlTest { - public void test_0() throws Exception { + public static void test_0() throws Exception { String sql = "SELECT\n" + " val,\n" + " ROW_NUMBER() OVER w AS 'row_number',\n" + diff --git a/src/test/java/com/alibaba/druid/not_support/sql/oracle/OracleCreateTypeTest4.java b/src/test/java/com/alibaba/druid/not_support/sql/oracle/OracleCreateTypeTest4.java new file mode 100644 index 0000000000..b377a74fd9 --- /dev/null +++ b/src/test/java/com/alibaba/druid/not_support/sql/oracle/OracleCreateTypeTest4.java @@ -0,0 +1,74 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.not_support.sql.oracle; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; + +import java.util.List; + +public class OracleCreateTypeTest4 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "CREATE OR REPLACE TYPE cms_contract_config_obj_TABLE\n" + + "AS TABLE OF ECC_CPR.cms_contract_config_obj"; // + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + +// System.out.println("Tables : " + visitor.getTables()); +// System.out.println("fields : " + visitor.getColumns()); +// System.out.println("coditions : " + visitor.getConditions()); +// System.out.println("relationships : " + visitor.getRelationships()); +// System.out.println("orderBy : " + visitor.getOrderByColumns()); + + assertEquals(0, visitor.getTables().size()); + + assertEquals(0, visitor.getColumns().size()); + + { + String text = SQLUtils.toOracleString(stmt); + + assertEquals("CREATE TYPE data_typ1 AS OBJECT (\n" + + "\tyear NUMBER, \n" + + "\tFUNCTION prod (invent NUMBER) RETURN NUMBER\n" + + ");", text); + } + + { + String text = SQLUtils.toOracleString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + + assertEquals("create type data_typ1 AS OBJECT (\n" + + "\tyear NUMBER, \n" + + "\tfunction prod (invent NUMBER) return NUMBER\n" + + ");", text); + } + // assertTrue(visitor.getColumns().contains(new TableStat.Column("acduser.vw_acd_info", "xzqh"))); + + // assertTrue(visitor.getOrderByColumns().contains(new TableStat.Column("employees", "last_name"))); + } +} diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/bitrix_queries_cut.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/bitrix_queries_cut.sql new file mode 100644 index 0000000000..48511b7ffb --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/bitrix_queries_cut.sql @@ -0,0 +1,2006 @@ +#begin 1 +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/eda' + AND RELATIVE_PATH = '/s1/bitrix/menu/06f' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/eda', '/s1/bitrix/menu/06f', 'bitrix:menu'); +SELECT * FROM `b_forum_user` LIMIT 0; +UPDATE b_forum_user SET LAST_VISIT=now() WHERE USER_ID = 1; +UPDATE b_forum_stat SET `USER_ID` = 1, `IP_ADDRESS` = '10.0.70.52', `SHOW_NAME` = 'admin', `LAST_VISIT` = now(), `SITE_ID` = 's1', `FORUM_ID` = 0, `TOPIC_ID` = 0 WHERE PHPSESSID='o50tf3qfh12hfbbfcpis0npeb2'; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/eda' + AND RELATIVE_PATH = '/s1/bitrix/menu/345' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/eda', '/s1/bitrix/menu/345', 'bitrix:menu'); + + SELECT + COUNT(ST.ID) as CNT + FROM + b_sticker ST + WHERE + ((ST.PERSONAL='Y' AND ST.CREATED_BY=1) OR ST.PERSONAL='N') + AND ST.CLOSED='N' AND ST.DELETED='N' AND ST.SITE_ID='s1' + AND ST.PAGE_URL='/forum/rules/'; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; +SELECT * FROM `b_forum_user` LIMIT 0; +UPDATE b_forum_user SET LAST_VISIT=now() WHERE USER_ID = 1; +UPDATE b_forum_stat SET `USER_ID` = 1, `IP_ADDRESS` = '10.0.70.52', `SHOW_NAME` = 'admin', `LAST_VISIT` = now(), `SITE_ID` = 's1', `FORUM_ID` = 1, `TOPIC_ID` = 0 WHERE PHPSESSID='o50tf3qfh12hfbbfcpis0npeb2'; + + SELECT BF.ID AS FORUM_ID , COUNT(FT_RENEW.ID) TCRENEW + FROM b_forum BF + LEFT JOIN b_forum_user_forum FUF ON (FUF.USER_ID = 1 AND FUF.FORUM_ID = BF.ID) + LEFT JOIN b_forum_user_forum FUF_ALL ON (FUF_ALL.USER_ID = 1 AND FUF_ALL.FORUM_ID = 0) + LEFT JOIN b_forum_topic FT_RENEW ON + ( + BF.ID = FT_RENEW.FORUM_ID AND FT_RENEW.STATE != 'L' AND + (FUF_ALL.LAST_VISIT IS NULL OR FT_RENEW.ABS_LAST_POST_DATE > FUF_ALL.LAST_VISIT) + ) + LEFT JOIN b_forum_user_topic FUT_RENEW ON ( + FUT_RENEW.FORUM_ID = BF.ID AND FUT_RENEW.TOPIC_ID = FT_RENEW.ID AND FUT_RENEW.USER_ID = 1) + WHERE( + (BF.ID IN (1 ,2)) + AND + ( + FUT_RENEW.LAST_VISIT IS NULL + AND + ( + (FUF_ALL.LAST_VISIT IS NULL AND FUF.LAST_VISIT IS NULL) + OR + ( + FUF.LAST_VISIT IS NOT NULL + AND + (FUF.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE) + ) + OR + ( + FUF.LAST_VISIT IS NULL + AND + FUF_ALL.LAST_VISIT IS NOT NULL + AND + ( + ( + FUF_ALL.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE + OR + FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE + ) + ) + ) + ) + ) + OR ( + FUT_RENEW.LAST_VISIT IS NOT NULL + AND + ( + FUT_RENEW.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE + OR + FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE + ) + ) + ) + GROUP BY BF.ID + ; +SELECT FST.*, FU.*, FSTAT.IP_ADDRESS, FSTAT.PHPSESSID, + DATE_FORMAT(FSTAT.LAST_VISIT, '%d.%m.%Y %H:%i:%s') AS LAST_VISIT, + FSTAT.FORUM_ID, FSTAT.TOPIC_ID, + U.LOGIN, U.NAME, U.SECOND_NAME, U.LAST_NAME, + FSTAT.SHOW_NAME + FROM ( SELECT FSTAT.USER_ID, MAX(FSTAT.ID) FST_ID, COUNT(FSTAT.PHPSESSID) COUNT_USER FROM b_forum_stat FSTAT LEFT JOIN b_user U ON (FSTAT.USER_ID=U.ID) WHERE 1=1 AND (FSTAT.SITE_ID = 's1') AND (FSTAT.USER_ID = 0 OR U.ACTIVE = 'Y') AND (FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - 600) <= FSTAT.LAST_VISIT) GROUP BY FSTAT.USER_ID) FST LEFT JOIN b_forum_stat FSTAT ON (FST.FST_ID = FSTAT.ID) LEFT JOIN b_forum_user FU ON (FST.USER_ID = FU.USER_ID) LEFT JOIN b_user U ON (FST.USER_ID = U.ID) ORDER BY FSTAT.USER_ID DESC; +SELECT COUNT('x') as C FROM b_user; +SELECT COUNT(FU.ID) AS CNT FROM b_forum_user FU INNER JOIN b_user U ON (U.ID = FU.USER_ID) WHERE (U.ACTIVE = 'Y') ; +SELECT COUNT(FU.ID) AS CNT FROM b_forum_user FU INNER JOIN b_user U ON (U.ID = FU.USER_ID) WHERE (NUM_POSTS > 0) AND (U.ACTIVE = 'Y') ; +SELECT F_FORUM.*, F.FORUM_GROUP_ID, F.NAME, F.DESCRIPTION, F.SORT, F.ACTIVE, + F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, F.ALLOW_IMG, F.ALLOW_VIDEO, + F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, F.ALLOW_FONT, F.ALLOW_SMILES, + F.ALLOW_ALIGN, F.ALLOW_UPLOAD, F.ALLOW_UPLOAD_EXT, F.ALLOW_MOVE_TOPIC, + F.ALLOW_NL2BR, F.ALLOW_TABLE, F.ALLOW_TOPIC_TITLED, F.ALLOW_SIGNATURE, + + F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.MODERATION, F.INDEXATION, F.DEDUPLICATION, + F.ORDER_BY, F.ORDER_DIRECTION, + '' as LID, '' as DIR, + F.TOPICS, F.XML_ID, + F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME, + DATE_FORMAT(F.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE, + F.LAST_MESSAGE_ID, FM.TOPIC_ID as TID, F.LAST_MESSAGE_ID as MID, + F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME, + DATE_FORMAT(F.ABS_LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as ABS_LAST_POST_DATE, + F.ABS_LAST_MESSAGE_ID, FM_ABS.TOPIC_ID as ABS_TID, + F.EVENT1, F.EVENT2, F.EVENT3, + FT.TITLE, FT.SOCNET_GROUP_ID, FT.OWNER_ID, + TRIM(BOTH '-' FROM REPLACE(CONCAT_WS('-',FT.ID,FT.TITLE_SEO), '--', '-')) AS TITLE_SEO, + FT.HTML AS TOPIC_HTML, FM.PARAM1, FM.PARAM2, + FT_ABS.TITLE as ABS_TITLE, FT_ABS.SOCNET_GROUP_ID as ABS_SOCNET_GROUP_ID, FT_ABS.OWNER_ID as ABS_OWNER_ID, + TRIM(BOTH '-' FROM REPLACE(CONCAT_WS('-',FT_ABS.ID,FT_ABS.TITLE_SEO), '--', '-')) AS ABS_TITLE_SEO, + FT_ABS.HTML AS ABS_TOPIC_HTML, FM_ABS.PARAM1 as ABS_PARAM1, FM_ABS.PARAM2 as ABS_PARAM2, + F.HTML + FROM + ( + SELECT F.ID , F2S.PATH2FORUM_MESSAGE + FROM b_forum F + + INNER JOIN b_forum2site F2S ON (F2S.FORUM_ID=F.ID) + WHERE (1=1 AND ((F2S.SITE_ID = 's1')) AND ((F.ID IN (1, 2))) ) + + GROUP BY F.ID,F2S.PATH2FORUM_MESSAGE + ) F_FORUM + INNER JOIN b_forum F ON (F_FORUM.ID = F.ID) + LEFT JOIN b_forum_group FG ON F.FORUM_GROUP_ID = FG.ID + LEFT JOIN b_forum_message FM ON F.LAST_MESSAGE_ID = FM.ID + LEFT JOIN b_forum_topic FT ON FM.TOPIC_ID = FT.ID + LEFT JOIN b_forum_message FM_ABS ON F.ABS_LAST_MESSAGE_ID = FM_ABS.ID + LEFT JOIN b_forum_topic FT_ABS ON FM_ABS.TOPIC_ID = FT_ABS.ID + ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/6b3' + AND RELATIVE_PATH = '/s1/bitrix/menu/06f' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/6b3', '/s1/bitrix/menu/06f', 'bitrix:menu'); +SELECT * FROM `b_forum_user` LIMIT 0; +UPDATE b_forum_user SET LAST_VISIT=now() WHERE USER_ID = 1; +UPDATE b_forum_stat SET `USER_ID` = 1, `IP_ADDRESS` = '10.0.70.52', `SHOW_NAME` = 'admin', `LAST_VISIT` = now(), `SITE_ID` = 's1', `FORUM_ID` = 0, `TOPIC_ID` = 0 WHERE PHPSESSID='o50tf3qfh12hfbbfcpis0npeb2'; +SELECT F_FORUM.*, F.FORUM_GROUP_ID, F.NAME, F.DESCRIPTION, F.SORT, F.ACTIVE, + F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, F.ALLOW_IMG, F.ALLOW_VIDEO, + F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, F.ALLOW_FONT, F.ALLOW_SMILES, + F.ALLOW_ALIGN, F.ALLOW_UPLOAD, F.ALLOW_UPLOAD_EXT, F.ALLOW_MOVE_TOPIC, + F.ALLOW_NL2BR, F.ALLOW_TABLE, F.ALLOW_TOPIC_TITLED, F.ALLOW_SIGNATURE, + '' as PATH2FORUM_MESSAGE, + F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.MODERATION, F.INDEXATION, F.DEDUPLICATION, + F.ORDER_BY, F.ORDER_DIRECTION, + '' as LID, '' as DIR, + F.TOPICS, F.XML_ID, + F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME, + DATE_FORMAT(F.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE, + F.LAST_MESSAGE_ID, FM.TOPIC_ID as TID, F.LAST_MESSAGE_ID as MID, + F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME, + DATE_FORMAT(F.ABS_LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as ABS_LAST_POST_DATE, + F.ABS_LAST_MESSAGE_ID, FM_ABS.TOPIC_ID as ABS_TID, + F.EVENT1, F.EVENT2, F.EVENT3, + FT.TITLE, FT.SOCNET_GROUP_ID, FT.OWNER_ID, + TRIM(BOTH '-' FROM REPLACE(CONCAT_WS('-',FT.ID,FT.TITLE_SEO), '--', '-')) AS TITLE_SEO, + FT.HTML AS TOPIC_HTML, FM.PARAM1, FM.PARAM2, + FT_ABS.TITLE as ABS_TITLE, FT_ABS.SOCNET_GROUP_ID as ABS_SOCNET_GROUP_ID, FT_ABS.OWNER_ID as ABS_OWNER_ID, + TRIM(BOTH '-' FROM REPLACE(CONCAT_WS('-',FT_ABS.ID,FT_ABS.TITLE_SEO), '--', '-')) AS ABS_TITLE_SEO, + FT_ABS.HTML AS ABS_TOPIC_HTML, FM_ABS.PARAM1 as ABS_PARAM1, FM_ABS.PARAM2 as ABS_PARAM2, + F.HTML + FROM + ( + SELECT F.ID + FROM b_forum F + + WHERE (1=1 ) + + GROUP BY F.ID + ) F_FORUM + INNER JOIN b_forum F ON (F_FORUM.ID = F.ID) + LEFT JOIN b_forum_group FG ON F.FORUM_GROUP_ID = FG.ID + LEFT JOIN b_forum_message FM ON F.LAST_MESSAGE_ID = FM.ID + LEFT JOIN b_forum_topic FT ON FM.TOPIC_ID = FT.ID + LEFT JOIN b_forum_message FM_ABS ON F.ABS_LAST_MESSAGE_ID = FM_ABS.ID + LEFT JOIN b_forum_topic FT_ABS ON FM_ABS.TOPIC_ID = FT_ABS.ID + ORDER BY F.SORT ASC ; +SELECT COUNT('x') as CNT FROM b_forum_user FU LEFT JOIN b_user U ON (FU.USER_ID = U.ID) WHERE 1 = 1 ; +SELECT FU.ID, U.ID as USER_ID, FU.SHOW_NAME, FU.DESCRIPTION, FU.IP_ADDRESS, + FU.REAL_IP_ADDRESS, FU.AVATAR, FU.NUM_POSTS, FU.POINTS as NUM_POINTS, + FU.INTERESTS, FU.SUBSC_GROUP_MESSAGE, FU.SUBSC_GET_MY_MESSAGE, + FU.LAST_POST, FU.ALLOW_POST, FU.SIGNATURE, FU.RANK_ID, + U.EMAIL, U.NAME, U.SECOND_NAME, U.LAST_NAME, U.LOGIN, U.PERSONAL_BIRTHDATE, + DATE_FORMAT(FU.DATE_REG, '%d.%m.%Y') as DATE_REG, + DATE_FORMAT(FU.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, + DATE_FORMAT(FU.LAST_VISIT, '%d.%m.%Y') as LAST_VISIT_SHORT, + DATE_FORMAT(U.DATE_REGISTER, '%d.%m.%Y') as DATE_REGISTER_SHORT, + U.PERSONAL_ICQ, U.PERSONAL_WWW, U.PERSONAL_PROFESSION, U.DATE_REGISTER, + U.PERSONAL_CITY, U.PERSONAL_COUNTRY, U.PERSONAL_PHOTO, + U.PERSONAL_GENDER, FU.POINTS, FU.HIDE_FROM_ONLINE, + DATE_FORMAT(U.PERSONAL_BIRTHDAY, '%d.%m.%Y') as PERSONAL_BIRTHDAY , +CASE WHEN (FU.USER_ID > 0 AND FU.SHOW_NAME = 'Y' AND LENGTH(TRIM(CONCAT_WS('',U.NAME,' ',U.LAST_NAME))) > 0) THEN TRIM(REPLACE(CONCAT_WS(' ',U.NAME,' ',U.LAST_NAME), ' ', ' ')) ELSE U.LOGIN END AS SHOW_ABC FROM b_forum_user FU LEFT JOIN b_user U ON (FU.USER_ID = U.ID) WHERE 1 = 1 + ORDER BY FU.NUM_POSTS DESC LIMIT 0, 20; +SELECT UG.GROUP_ID FROM b_user_group UG WHERE UG.USER_ID = 1 AND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= now())) AND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= now())) ; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/6b3' + AND RELATIVE_PATH = '/s1/bitrix/menu/345' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/6b3', '/s1/bitrix/menu/345', 'bitrix:menu'); + + SELECT + COUNT(ST.ID) as CNT + FROM + b_sticker ST + WHERE + ((ST.PERSONAL='Y' AND ST.CREATED_BY=1) OR ST.PERSONAL='N') + AND ST.CLOSED='N' AND ST.DELETED='N' AND ST.SITE_ID='s1' + AND ST.PAGE_URL='/forum/users/'; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; +SELECT * FROM `b_forum_user` LIMIT 0; +UPDATE b_forum_user SET LAST_VISIT=now() WHERE USER_ID = 1; +UPDATE b_forum_stat SET `USER_ID` = 1, `IP_ADDRESS` = '10.0.70.52', `SHOW_NAME` = 'admin', `LAST_VISIT` = now(), `SITE_ID` = 's1', `FORUM_ID` = 0, `TOPIC_ID` = 0 WHERE PHPSESSID='o50tf3qfh12hfbbfcpis0npeb2'; +SELECT COUNT('x') as CNT FROM b_forum_user FU LEFT JOIN b_user U ON (FU.USER_ID = U.ID) WHERE 1 = 1 ; +SELECT FU.ID, U.ID as USER_ID, FU.SHOW_NAME, FU.DESCRIPTION, FU.IP_ADDRESS, + FU.REAL_IP_ADDRESS, FU.AVATAR, FU.NUM_POSTS, FU.POINTS as NUM_POINTS, + FU.INTERESTS, FU.SUBSC_GROUP_MESSAGE, FU.SUBSC_GET_MY_MESSAGE, + FU.LAST_POST, FU.ALLOW_POST, FU.SIGNATURE, FU.RANK_ID, + U.EMAIL, U.NAME, U.SECOND_NAME, U.LAST_NAME, U.LOGIN, U.PERSONAL_BIRTHDATE, + DATE_FORMAT(FU.DATE_REG, '%d.%m.%Y') as DATE_REG, + DATE_FORMAT(FU.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, + DATE_FORMAT(FU.LAST_VISIT, '%d.%m.%Y') as LAST_VISIT_SHORT, + DATE_FORMAT(U.DATE_REGISTER, '%d.%m.%Y') as DATE_REGISTER_SHORT, + U.PERSONAL_ICQ, U.PERSONAL_WWW, U.PERSONAL_PROFESSION, U.DATE_REGISTER, + U.PERSONAL_CITY, U.PERSONAL_COUNTRY, U.PERSONAL_PHOTO, + U.PERSONAL_GENDER, FU.POINTS, FU.HIDE_FROM_ONLINE, + DATE_FORMAT(U.PERSONAL_BIRTHDAY, '%d.%m.%Y') as PERSONAL_BIRTHDAY , +CASE WHEN (FU.USER_ID > 0 AND FU.SHOW_NAME = 'Y' AND LENGTH(TRIM(CONCAT_WS('',U.NAME,' ',U.LAST_NAME))) > 0) THEN TRIM(REPLACE(CONCAT_WS(' ',U.NAME,' ',U.LAST_NAME), ' ', ' ')) ELSE U.LOGIN END AS SHOW_ABC FROM b_forum_user FU LEFT JOIN b_user U ON (FU.USER_ID = U.ID) WHERE 1 = 1 + ORDER BY FU.NUM_POSTS DESC LIMIT 0, 20; +SELECT UG.GROUP_ID FROM b_user_group UG WHERE UG.USER_ID = 1 AND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= now())) AND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= now())) ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/f25' + AND RELATIVE_PATH = '/s1/bitrix/menu/06f' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/f25', '/s1/bitrix/menu/06f', 'bitrix:menu'); +SELECT * FROM `b_forum_user` LIMIT 0; +UPDATE b_forum_user SET LAST_VISIT=now() WHERE USER_ID = 1; +UPDATE b_forum_stat SET `USER_ID` = 1, `IP_ADDRESS` = '10.0.70.52', `SHOW_NAME` = 'admin', `LAST_VISIT` = now(), `SITE_ID` = 's1', `FORUM_ID` = 0, `TOPIC_ID` = 0 WHERE PHPSESSID='o50tf3qfh12hfbbfcpis0npeb2'; +SELECT U.*, DATE_FORMAT(U.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X, IF(U.LAST_ACTIVITY_DATE > DATE_SUB(NOW(), INTERVAL 120 SECOND), 'Y', 'N') IS_ONLINE, DATE_FORMAT(U.DATE_REGISTER, '%d.%m.%Y %H:%i:%s') DATE_REGISTER, DATE_FORMAT(U.LAST_LOGIN, '%d.%m.%Y %H:%i:%s') LAST_LOGIN, DATE_FORMAT(U.PERSONAL_BIRTHDAY, '%d.%m.%Y') PERSONAL_BIRTHDAY + + + FROM + b_user U + + + WHERE + (1=1 + AND + ( + U.ID='1' + ) + ) + ORDER BY U.ID asc; +SELECT FU.ID, FU.USER_ID, FU.SHOW_NAME, FU.DESCRIPTION, FU.IP_ADDRESS, + FU.REAL_IP_ADDRESS, FU.AVATAR, FU.NUM_POSTS, FU.POINTS as NUM_POINTS, + FU.INTERESTS, FU.HIDE_FROM_ONLINE, FU.SUBSC_GROUP_MESSAGE, FU.SUBSC_GET_MY_MESSAGE, + FU.LAST_POST, FU.ALLOW_POST, FU.SIGNATURE, FU.RANK_ID, FU.POINTS, + DATE_FORMAT(FU.DATE_REG, '%d.%m.%Y') as DATE_REG, + DATE_FORMAT(FU.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT + FROM b_forum_user FU + WHERE FU.USER_ID = 1; +SELECT F_FORUM.*, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION, F.DEDUPLICATION, F.ALLOW_MOVE_TOPIC, '' as LID, + F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME, + DATE_FORMAT(F.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE, + F.LAST_MESSAGE_ID, F.LAST_MESSAGE_ID as MID, + F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME, + DATE_FORMAT(F.ABS_LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as ABS_LAST_POST_DATE, + F.ABS_LAST_MESSAGE_ID, F.SORT, F.ORDER_BY, + F.ORDER_DIRECTION, F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, + F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_TABLE, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, + F.ALLOW_ALIGN, F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2, + F.EVENT3, F.ALLOW_NL2BR, '' as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT, F.ALLOW_TOPIC_TITLED, + F.ALLOW_SIGNATURE, + F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.XML_ID + FROM + ( + SELECT F.ID + FROM b_forum F + , b_forum2site F2S + WHERE (1=1 AND (F.ID = F2S.FORUM_ID AND (F2S.SITE_ID = 's1' )) AND ((F.ID IN (1, 2))) ) + GROUP BY F.ID + ) F_FORUM + INNER JOIN b_forum F ON (F_FORUM.ID = F.ID) + ; +SELECT UG.GROUP_ID FROM b_user_group UG WHERE UG.USER_ID = 1 AND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= now())) AND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= now())) ; + + SELECT ENTITY_TYPE_ID, ENTITY_ID, PREVIOUS_VALUE, CURRENT_VALUE, PREVIOUS_POSITION, CURRENT_POSITION + FROM b_rating_results + WHERE RATING_ID = '2' AND ENTITY_ID IN (1) + ; + + SELECT FMM.*, FT.TITLE, FT.DESCRIPTION, FT.VIEWS, FT.LAST_POSTER_ID, + TRIM(BOTH '-' FROM REPLACE(CONCAT_WS('-',FT.ID,FT.TITLE_SEO), '--', '-')) as TITLE_SEO, + DATE_FORMAT(FT.START_DATE, '%d.%m.%Y %H:%i:%s') as START_DATE, + FT.USER_START_NAME, FT.USER_START_ID, FT.POSTS, FT.LAST_POSTER_NAME, + FT.LAST_MESSAGE_ID, '' as IMAGE, '' as IMAGE_DESCR, + FT.APPROVED, FT.STATE, FT.FORUM_ID, FT.ICON, FT.SORT, FT.HTML + FROM + ( + SELECT FM.TOPIC_ID, COUNT(FM.ID) AS COUNT_MESSAGE, MIN(FM.ID) AS FIRST_POST, MAX(FM.ID) AS LAST_POST + FROM b_forum_message FM + + WHERE 1=1 + AND (FM.AUTHOR_ID = (1)) AND (FM.FORUM_ID IN (1,2)) + GROUP BY FM.TOPIC_ID + ) FMM + LEFT JOIN b_forum_topic FT ON (FT.ID = FMM.TOPIC_ID) + ORDER BY FMM.LAST_POST DESC; +SELECT FM.ID, DATE_FORMAT(FM.POST_DATE, '%d.%m.%Y %H:%i:%s') AS POST_DATE FROM b_forum_message FM WHERE FM.ID=7 OR FM.ID=7; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/f25' + AND RELATIVE_PATH = '/s1/bitrix/menu/345' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/f25', '/s1/bitrix/menu/345', 'bitrix:menu'); + + SELECT + COUNT(ST.ID) as CNT + FROM + b_sticker ST + WHERE + ((ST.PERSONAL='Y' AND ST.CREATED_BY=1) OR ST.PERSONAL='N') + AND ST.CLOSED='N' AND ST.DELETED='N' AND ST.SITE_ID='s1' + AND ST.PAGE_URL='/forum/user/1/'; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; +SELECT L.*, L.LID as ID, L.LID as LANGUAGE_ID, C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_language L, b_culture C WHERE C.ID = L.CULTURE_ID AND (L.LID='ru') AND (L.ACTIVE='Y') ORDER BY L.SORT ; +DELETE FROM b_admin_notify_lang WHERE NOTIFY_ID = 16; +DELETE FROM b_admin_notify WHERE ID = 16; +SELECT L.*, L.LID as ID, L.LID as LANGUAGE_ID, C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_language L, b_culture C WHERE C.ID = L.CULTURE_ID ORDER BY L.LID ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/903' + AND RELATIVE_PATH = '/s1/bitrix/menu/06f' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/903', '/s1/bitrix/menu/06f', 'bitrix:menu'); + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/903' + AND RELATIVE_PATH = '/s1/bitrix/menu/345' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/903', '/s1/bitrix/menu/345', 'bitrix:menu'); + + SELECT + COUNT(ST.ID) as CNT + FROM + b_sticker ST + WHERE + ((ST.PERSONAL='Y' AND ST.CREATED_BY=1) OR ST.PERSONAL='N') + AND ST.CLOSED='N' AND ST.DELETED='N' AND ST.SITE_ID='s1' + AND ST.PAGE_URL='/events-calendar/'; +SELECT AN.ID, AN.MODULE_ID, AN.TAG, AN.MESSAGE, AN.ENABLE_CLOSE, AN.PUBLIC_SECTION, ANL.MESSAGE as MESSAGE_LANG FROM b_admin_notify AN LEFT JOIN b_admin_notify_lang ANL ON (AN.ID = ANL.NOTIFY_ID AND ANL.LID = 'ru') WHERE (1=1 + AND + ( + AN.PUBLIC_SECTION='N' + ) + ) ORDER BY AN.ID DESC; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (6); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=6; + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Analytics\\CounterDataTable::submitData();', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(now(), INTERVAL 60 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=6; + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW()) DATE_DIFF FROM b_agent WHERE ACTIVE='Y' ; +DELETE FROM b_admin_notify_lang WHERE NOTIFY_ID IN (SELECT ID FROM b_admin_notify WHERE TAG like '%PHOTOGALLERY_UPLOADER%'); +DELETE FROM b_admin_notify WHERE TAG like '%PHOTOGALLERY_UPLOADER%'; +SELECT L.*, L.LID as ID, L.LID as LANGUAGE_ID, C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_language L, b_culture C WHERE C.ID = L.CULTURE_ID ORDER BY L.LID ; +SELECT * FROM `b_admin_notify` LIMIT 0; +SELECT L.*, L.LID as ID, L.LID as LANGUAGE_ID, C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_language L, b_culture C WHERE C.ID = L.CULTURE_ID ORDER BY L.LID ; +SELECT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.ACTIVE as ACTIVE + FROM + b_iblock B + INNER JOIN b_lang L ON B.LID=L.LID + INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID + + + WHERE 1=1 + AND ( + + ((((BE.IBLOCK_ID = '9')))) + AND ((( BE.ACTIVE IS NULL OR NOT (BE.ACTIVE='Y')))) + ) + AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL))) + + LIMIT 1; +SELECT AN.ID, AN.MODULE_ID, AN.TAG, AN.MESSAGE, AN.ENABLE_CLOSE, AN.PUBLIC_SECTION, ANL.MESSAGE as MESSAGE_LANG FROM b_admin_notify AN LEFT JOIN b_admin_notify_lang ANL ON (AN.ID = ANL.NOTIFY_ID AND ANL.LID = 'ru') WHERE (1=1 + AND + ( + AN.PUBLIC_SECTION='N' + ) + ) ORDER BY AN.ID DESC; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; +DELETE FROM b_admin_notify_lang WHERE NOTIFY_ID IN (SELECT ID FROM b_admin_notify WHERE TAG like '%PHOTOGALLERY_UPLOADER%'); +DELETE FROM b_admin_notify WHERE TAG like '%PHOTOGALLERY_UPLOADER%'; +SELECT L.*, L.LID as ID, L.LID as LANGUAGE_ID, C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_language L, b_culture C WHERE C.ID = L.CULTURE_ID ORDER BY L.LID ; +SELECT * FROM `b_admin_notify` LIMIT 0; +SELECT L.*, L.LID as ID, L.LID as LANGUAGE_ID, C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_language L, b_culture C WHERE C.ID = L.CULTURE_ID ORDER BY L.LID ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; +SELECT L.*, BS.* FROM b_iblock_site BS, b_lang L WHERE L.LID=BS.SITE_ID AND BS.IBLOCK_ID=9; +INSERT INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) VALUES ('*', '*', '/bitrix/cache/photogallery.~853832', '*'); +SELECT A.ID, A.MODULE_ID, A.USER_ID, B.LOGIN, B.NAME as USER_NAME, B.LAST_NAME, A.SORT, A.NAME, A.ACTIVE, DATE_FORMAT(A.LAST_EXEC, '%d.%m.%Y %H:%i:%s') as LAST_EXEC, DATE_FORMAT(A.NEXT_EXEC, '%d.%m.%Y %H:%i:%s') as NEXT_EXEC, A.AGENT_INTERVAL, A.IS_PERIOD FROM b_agent A LEFT JOIN b_user B ON(A.USER_ID = B.ID) WHERE A.NAME LIKE '\\\\Bitrix\\\\Main\\\\Data\\\\CacheEngineFiles::delayedDelete(%' ORDER BY A.ID DESC; + + SELECT ID + FROM b_agent + WHERE NAME = '\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete();' + AND USER_ID IS NULL; +INSERT INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) VALUES ('*', '*', '/bitrix/managed_cache/MYSQL/agents.~53033', '*'); +SELECT * FROM `b_agent` LIMIT 0; +INSERT INTO b_agent(`MODULE_ID`, `SORT`, `NAME`, `ACTIVE`, `NEXT_EXEC`, `AGENT_INTERVAL`, `IS_PERIOD`, `USER_ID`) VALUES('main', '100', '\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete();', 'Y', CURRENT_DATE, '1', 'Y', NULL ); +INSERT INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) VALUES ('*', '*', '/bitrix/cache/s1/photogallery.~194981', '*'); +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; +SELECT L.*, BS.* FROM b_iblock_site BS, b_lang L WHERE L.LID=BS.SITE_ID AND BS.IBLOCK_ID=9; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; +SELECT L.*, BS.* FROM b_iblock_site BS, b_lang L WHERE L.LID=BS.SITE_ID AND BS.IBLOCK_ID=9; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT BP.* + FROM b_iblock_property BP + + WHERE BP.ACTIVE = 'Y' + AND BP.VERSION = 2 + AND BP.IBLOCK_ID = 9 + + ORDER BY BP.SORT ASC + ; +SELECT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID + FROM + b_iblock B + INNER JOIN b_lang L ON B.LID=L.LID + INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID + + + WHERE 1=1 + AND ( + + ((((BE.ID = '110')))) + AND ((((B.ACTIVE='Y')))) + AND ((((BE.IBLOCK_ID = '9')))) + ) + AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL))) + + ; + + SELECT BP.*, BEP.ID as PROPERTY_VALUE_ID, BEP.VALUE, BEP.DESCRIPTION, BEPE.VALUE VALUE_ENUM, BEPE.XML_ID VALUE_XML_ID, BEPE.SORT VALUE_SORT + FROM b_iblock B + INNER JOIN b_iblock_property BP ON B.ID=BP.IBLOCK_ID + LEFT JOIN b_iblock_element_property BEP ON (BP.ID = BEP.IBLOCK_PROPERTY_ID AND BEP.IBLOCK_ELEMENT_ID = 110) + LEFT JOIN b_iblock_property_enum BEPE ON (BP.PROPERTY_TYPE = 'L' AND BEPE.ID=BEP.VALUE_ENUM AND BEPE.PROPERTY_ID=BP.ID) + WHERE B.ID = 9 + AND BP.ACTIVE='Y' + + ORDER BY BP.SORT asc, BP.ID asc, BEPE.SORT asc, BEP.ID asc; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/c3f' + AND RELATIVE_PATH = '/s1/bitrix/iblock.vote/cd2' + ; +UPDATE b_iblock_element SET TIMESTAMP_X = TIMESTAMP_X, SHOW_COUNTER_START = ifnull(SHOW_COUNTER_START, now()), SHOW_COUNTER = ifnull(SHOW_COUNTER, 0) + 1 WHERE ID=110; +SELECT L.*, BS.* FROM b_iblock_site BS, b_lang L WHERE L.LID=BS.SITE_ID AND BS.IBLOCK_ID=9; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT BP.* + FROM b_iblock_property BP + + WHERE BP.ACTIVE = 'Y' + AND BP.VERSION = 2 + AND BP.IBLOCK_ID = 9 + + ORDER BY BP.SORT ASC + ; +SELECT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID + FROM + b_iblock B + INNER JOIN b_lang L ON B.LID=L.LID + INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID + + + WHERE 1=1 + AND ( + + ((((BE.ID = '111')))) + AND ((((B.ACTIVE='Y')))) + AND ((((BE.IBLOCK_ID = '9')))) + ) + AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL))) + + ; + + SELECT BP.*, BEP.ID as PROPERTY_VALUE_ID, BEP.VALUE, BEP.DESCRIPTION, BEPE.VALUE VALUE_ENUM, BEPE.XML_ID VALUE_XML_ID, BEPE.SORT VALUE_SORT + FROM b_iblock B + INNER JOIN b_iblock_property BP ON B.ID=BP.IBLOCK_ID + LEFT JOIN b_iblock_element_property BEP ON (BP.ID = BEP.IBLOCK_PROPERTY_ID AND BEP.IBLOCK_ELEMENT_ID = 111) + LEFT JOIN b_iblock_property_enum BEPE ON (BP.PROPERTY_TYPE = 'L' AND BEPE.ID=BEP.VALUE_ENUM AND BEPE.PROPERTY_ID=BP.ID) + WHERE B.ID = 9 + AND BP.ACTIVE='Y' + + ORDER BY BP.SORT asc, BP.ID asc, BEPE.SORT asc, BEP.ID asc; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/c3f' + AND RELATIVE_PATH = '/s1/bitrix/iblock.vote/cd2' + ; +UPDATE b_iblock_element SET TIMESTAMP_X = TIMESTAMP_X, SHOW_COUNTER_START = ifnull(SHOW_COUNTER_START, now()), SHOW_COUNTER = ifnull(SHOW_COUNTER, 0) + 1 WHERE ID=111; +SELECT L.*, BS.* FROM b_iblock_site BS, b_lang L WHERE L.LID=BS.SITE_ID AND BS.IBLOCK_ID=9; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (20); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=20; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +UPDATE b_cache_tag SET RELATIVE_PATH='3:1469352763' WHERE TAG='**'; + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete(1);', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL 1 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=20; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT UG.GROUP_ID FROM b_user_group UG WHERE UG.USER_ID = 1 AND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= now())) AND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= now())) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT AN.ID, AN.MODULE_ID, AN.TAG, AN.MESSAGE, AN.ENABLE_CLOSE, AN.PUBLIC_SECTION, ANL.MESSAGE as MESSAGE_LANG FROM b_admin_notify AN LEFT JOIN b_admin_notify_lang ANL ON (AN.ID = ANL.NOTIFY_ID AND ANL.LID = 'ru') WHERE (1=1 + AND + ( + AN.PUBLIC_SECTION='N' + ) + ) ORDER BY AN.ID DESC; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (20); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=20; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +DELETE FROM b_cache_tag + WHERE SITE_ID = '*' + AND CACHE_SALT = '*' + AND RELATIVE_PATH = '/bitrix/cache/photogallery.~853832'; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +UPDATE b_cache_tag SET RELATIVE_PATH='2:1469352770' WHERE TAG='**'; + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete(1);', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL 1 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=20; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT UG.GROUP_ID FROM b_user_group UG WHERE UG.USER_ID = 1 AND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= now())) AND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= now())) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (20); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=20; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete(1);', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL 1 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=20; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT UG.GROUP_ID FROM b_user_group UG WHERE UG.USER_ID = 1 AND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= now())) AND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= now())) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (20); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=20; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +DELETE FROM b_cache_tag + WHERE SITE_ID = '*' + AND CACHE_SALT = '*' + AND RELATIVE_PATH = '/bitrix/managed_cache/MYSQL/agents.~53033'; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +UPDATE b_cache_tag SET RELATIVE_PATH='1:1469352782' WHERE TAG='**'; + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete(1);', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL 1 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=20; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/f20' + AND RELATIVE_PATH = '/s1/bitrix/menu/06f' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/f20', '/s1/bitrix/menu/06f', 'bitrix:menu'); +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' AND B.GROUP_ID IN (1); +SELECT G.ID, G.NAME, G.SITE_ID FROM b_blog_group G WHERE G.ID = 1; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 3; +SELECT U.*, DATE_FORMAT(U.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X, IF(U.LAST_ACTIVITY_DATE > DATE_SUB(NOW(), INTERVAL 120 SECOND), 'Y', 'N') IS_ONLINE, DATE_FORMAT(U.DATE_REGISTER, '%d.%m.%Y %H:%i:%s') DATE_REGISTER, DATE_FORMAT(U.LAST_LOGIN, '%d.%m.%Y %H:%i:%s') LAST_LOGIN, DATE_FORMAT(U.PERSONAL_BIRTHDAY, '%d.%m.%Y') PERSONAL_BIRTHDAY + + + FROM + b_user U + + + WHERE + (1=1 + AND + ( + U.ID='3' + ) + ) + ORDER BY U.ID asc; +SELECT C.CATEGORY_ID as CATEGORY_ID, CC.NAME as NAME, COUNT( C.ID) as CNT FROM b_blog_post_category C LEFT JOIN b_blog_category CC ON (CC.ID = C.CATEGORY_ID) INNER JOIN b_blog_post P ON (P.ID = C.POST_ID) WHERE ((((C.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'P' )))) GROUP BY C.CATEGORY_ID, CC.NAME ORDER BY CC.NAME ASC ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG WHERE UG.USER_ID = 1 AND UG.BLOG_ID = 0 ; +SELECT DATE_FORMAT(P.DATE_PUBLISH, '%d.%m.%Y %H:%i:%s') as DATE_PUBLISH, P.ID as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'P' )))) ORDER BY P.DATE_PUBLISH ASC LIMIT 1; +SELECT DATE_FORMAT(P.DATE_PUBLISH, '%Y-%m-%d') as DATE_PUBLISH1, COUNT(P.ID) as CNT FROM b_blog_post P WHERE P.BLOG_ID = 2 AND P.DATE_PUBLISH >= '2016-07-01' AND P.DATE_PUBLISH < '2016-08-01' AND P.PUBLISH_STATUS = 'P' GROUP BY DATE_PUBLISH1 ORDER BY DATE_PUBLISH1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' ; + + SELECT + stags2.NAME + ,COUNT(DISTINCT stags2.SEARCH_CONTENT_ID) as CNT + ,MAX(sc.DATE_CHANGE) DC_TMP + ,DATE_FORMAT(MAX(sc.DATE_CHANGE), '%d.%m.%Y %H:%i:%s') as FULL_DATE_CHANGE + ,DATE_FORMAT(MAX(sc.DATE_CHANGE), '%d.%m.%Y') as DATE_CHANGE + FROM b_search_tags stags2 + INNER JOIN b_search_content sc ON (stags2.SEARCH_CONTENT_ID=sc.ID) + + INNER JOIN b_search_content_site scsite ON (sc.ID=scsite.SEARCH_CONTENT_ID AND stags2.SITE_ID=scsite.SITE_ID) + + WHERE + ((1=1)) + AND (1=1) + AND ( + ( +scsite.SITE_ID = 's1' +AND ( + ( + (sc.DATE_FROM IS NULL) + OR sc.DATE_FROM <= '2016-07-24 12:33:02' + ) + AND ( + (sc.DATE_TO IS NULL) + OR sc.DATE_TO >= '2016-07-24 12:33:02' + ) +)) + AND( + ( +sc.MODULE_ID = 'blog' +AND sc.PARAM1 = 'POST' +AND sc.PARAM2 = '2' + )) + ) + GROUP BY + stags2.NAME + ORDER BY CNT DESC + LIMIT 30; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/f20' + AND RELATIVE_PATH = '/s1/bitrix/search.tags.cloud/f20' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/f20', '/s1/bitrix/search.tags.cloud/f20', 'bitrix:search.tags.cloud'); +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG INNER JOIN b_blog B ON (UG.BLOG_ID = B.ID AND B.URL='s1_blog_3') WHERE UG.USER_ID = 1 ; +SELECT P.FAVORITE_SORT as FAVORITE_SORT, DATE_FORMAT(P.DATE_PUBLISH, '%d.%m.%Y %H:%i:%s') as DATE_PUBLISH, P.ID as ID, MAX('W') as PERMS, COUNT( P.ID) as CNT FROM b_blog_post P WHERE ((((P.PUBLISH_STATUS = 'P' )))) AND (((('W' > 'D' )))) AND ((((P.BLOG_ID = 2 )))) AND ((((P.FAVORITE_SORT > 0 )))) GROUP BY P.FAVORITE_SORT, P.DATE_PUBLISH, P.ID ORDER BY P.FAVORITE_SORT ASC, P.DATE_PUBLISH DESC LIMIT 25; +SELECT COUNT(DISTINCT P.ID) as CNT FROM b_blog_post P WHERE ((((P.PUBLISH_STATUS = 'P' )))) AND (((('W' > 'D' )))) AND ((((P.BLOG_ID = 2 )))) AND ((((P.DATE_PUBLISH <= '2016-07-24 12:33:02')))) GROUP BY P.DATE_PUBLISH, P.ID ; +SELECT DATE_FORMAT(P.DATE_PUBLISH, '%d.%m.%Y %H:%i:%s') as DATE_PUBLISH, P.ID as ID, MAX('W') as PERMS, COUNT( P.ID) as CNT FROM b_blog_post P WHERE ((((P.PUBLISH_STATUS = 'P' )))) AND (((('W' > 'D' )))) AND ((((P.BLOG_ID = 2 )))) AND ((((P.DATE_PUBLISH <= '2016-07-24 12:33:02')))) GROUP BY P.DATE_PUBLISH, P.ID ORDER BY P.DATE_PUBLISH DESC, P.ID DESC LIMIT 0, 27; +SELECT P.*, IF(P.DATE_PUBLISH <= NOW(), 'Y', 'N') as DATE_PUBLISHED, DATE_FORMAT(P.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(P.DATE_PUBLISH, '%d.%m.%Y %H:%i:%s') as DATE_PUBLISH FROM b_blog_post P WHERE P.ID = 3; +SELECT G.ID as ID, G.FILE_ID as FILE_ID, G.POST_ID as POST_ID, G.BLOG_ID as BLOG_ID, G.USER_ID as USER_ID, G.TITLE as TITLE, DATE_FORMAT(G.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X, G.IMAGE_SIZE as IMAGE_SIZE FROM b_blog_image G WHERE ((((G.POST_ID = 3 )))) AND ((((G.BLOG_ID = 2 )))) AND ((((G.IS_COMMENT = 'N' )))) ORDER BY G.ID ASC ; +SELECT G.* FROM b_blog_image G WHERE G.ID = 4; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 3; +SELECT U.*, DATE_FORMAT(U.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X, IF(U.LAST_ACTIVITY_DATE > DATE_SUB(NOW(), INTERVAL 120 SECOND), 'Y', 'N') IS_ONLINE, DATE_FORMAT(U.DATE_REGISTER, '%d.%m.%Y %H:%i:%s') DATE_REGISTER, DATE_FORMAT(U.LAST_LOGIN, '%d.%m.%Y %H:%i:%s') LAST_LOGIN, DATE_FORMAT(U.PERSONAL_BIRTHDAY, '%d.%m.%Y') PERSONAL_BIRTHDAY + + + FROM + b_user U + + + WHERE + (1=1 + AND + ( + U.ID='3' + ) + ) + ORDER BY U.ID asc; +SELECT C.ID, C.BLOG_ID, C.NAME FROM b_blog_category C WHERE C.ID = 9; +SELECT C.ID, C.BLOG_ID, C.NAME FROM b_blog_category C WHERE C.ID = 10; +SELECT C.ID, C.BLOG_ID, C.NAME FROM b_blog_category C WHERE C.ID = 7; +SELECT C.ID, C.BLOG_ID, C.NAME FROM b_blog_category C WHERE C.ID = 11; + + SELECT + UF.ID + ,UF.ENTITY_ID + ,UF.FIELD_NAME + ,UF.USER_TYPE_ID + ,UF.XML_ID + ,UF.SORT + ,UF.MULTIPLE + ,UF.MANDATORY + ,UF.SHOW_FILTER + ,UF.SHOW_IN_LIST + ,UF.EDIT_IN_LIST + ,UF.IS_SEARCHABLE + ,UF.SETTINGS + + ,UFL.EDIT_FORM_LABEL + ,UFL.LIST_COLUMN_LABEL + ,UFL.LIST_FILTER_LABEL + ,UFL.ERROR_MESSAGE + ,UFL.HELP_MESSAGE + + FROM + b_user_field UF + LEFT JOIN b_user_field_lang UFL on UFL.LANGUAGE_ID = 'ru' AND UFL.USER_FIELD_ID = UF.ID + +WHERE UF.ENTITY_ID = 'BLOG_POST' +ORDER BY UF.SORT ASC, UF.ID ASC; +SELECT VALUE_ID, UF_BLOG_POST_DOC, UF_BLOG_POST_URL_PRV, UF_GRATITUDE FROM b_uts_blog_post WHERE VALUE_ID = 3; +SELECT P.*, IF(P.DATE_PUBLISH <= NOW(), 'Y', 'N') as DATE_PUBLISHED, DATE_FORMAT(P.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(P.DATE_PUBLISH, '%d.%m.%Y %H:%i:%s') as DATE_PUBLISH FROM b_blog_post P WHERE P.ID = 2; +SELECT G.ID as ID, G.FILE_ID as FILE_ID, G.POST_ID as POST_ID, G.BLOG_ID as BLOG_ID, G.USER_ID as USER_ID, G.TITLE as TITLE, DATE_FORMAT(G.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X, G.IMAGE_SIZE as IMAGE_SIZE FROM b_blog_image G WHERE ((((G.POST_ID = 2 )))) AND ((((G.BLOG_ID = 2 )))) AND ((((G.IS_COMMENT = 'N' )))) ORDER BY G.ID ASC ; +SELECT G.* FROM b_blog_image G WHERE G.ID = 3; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 3; +SELECT U.*, DATE_FORMAT(U.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X, IF(U.LAST_ACTIVITY_DATE > DATE_SUB(NOW(), INTERVAL 120 SECOND), 'Y', 'N') IS_ONLINE, DATE_FORMAT(U.DATE_REGISTER, '%d.%m.%Y %H:%i:%s') DATE_REGISTER, DATE_FORMAT(U.LAST_LOGIN, '%d.%m.%Y %H:%i:%s') LAST_LOGIN, DATE_FORMAT(U.PERSONAL_BIRTHDAY, '%d.%m.%Y') PERSONAL_BIRTHDAY + + + FROM + b_user U + + + WHERE + (1=1 + AND + ( + U.ID='3' + ) + ) + ORDER BY U.ID asc; +SELECT C.ID, C.BLOG_ID, C.NAME FROM b_blog_category C WHERE C.ID = 5; +SELECT C.ID, C.BLOG_ID, C.NAME FROM b_blog_category C WHERE C.ID = 6; +SELECT C.ID, C.BLOG_ID, C.NAME FROM b_blog_category C WHERE C.ID = 8; +SELECT VALUE_ID, UF_BLOG_POST_DOC, UF_BLOG_POST_URL_PRV, UF_GRATITUDE FROM b_uts_blog_post WHERE VALUE_ID = 2; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/f20' + AND RELATIVE_PATH = '/s1/bitrix/menu/345' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/f20', '/s1/bitrix/menu/345', 'bitrix:menu'); + + SELECT + COUNT(ST.ID) as CNT + FROM + b_sticker ST + WHERE + ((ST.PERSONAL='Y' AND ST.CREATED_BY=1) OR ST.PERSONAL='N') + AND ST.CLOSED='N' AND ST.DELETED='N' AND ST.SITE_ID='s1' + AND ST.PAGE_URL='/blogs/s1_blog_3/'; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (20); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=20; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete(1);', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL 1 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=20; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' AND B.GROUP_ID IN (1); +SELECT G.ID, G.NAME, G.SITE_ID FROM b_blog_group G WHERE G.ID = 1; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG WHERE UG.USER_ID = 1 AND UG.BLOG_ID = 0 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG INNER JOIN b_blog B ON (UG.BLOG_ID = B.ID AND B.URL='s1_blog_3') WHERE UG.USER_ID = 1 ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (20); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=20; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +DELETE FROM b_cache_tag + WHERE SITE_ID = '*' + AND CACHE_SALT = '*' + AND RELATIVE_PATH = '/bitrix/cache/s1/photogallery.~194981'; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +UPDATE b_cache_tag SET RELATIVE_PATH='0:1469352793' WHERE TAG='**'; +DELETE FROM b_agent WHERE ID=20; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' AND B.GROUP_ID IN (1); +SELECT G.ID, G.NAME, G.SITE_ID FROM b_blog_group G WHERE G.ID = 1; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG WHERE UG.USER_ID = 1 AND UG.BLOG_ID = 0 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG INNER JOIN b_blog B ON (UG.BLOG_ID = B.ID AND B.URL='s1_blog_3') WHERE UG.USER_ID = 1 ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW()) DATE_DIFF FROM b_agent WHERE ACTIVE='Y' ; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' AND B.GROUP_ID IN (1); +SELECT G.ID, G.NAME, G.SITE_ID FROM b_blog_group G WHERE G.ID = 1; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG WHERE UG.USER_ID = 1 AND UG.BLOG_ID = 0 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG INNER JOIN b_blog B ON (UG.BLOG_ID = B.ID AND B.URL='s1_blog_3') WHERE UG.USER_ID = 1 ; +SELECT C.ID as ID, C.BLOG_ID as BLOG_ID, C.USER_ID as USER_ID FROM b_blog_user2blog C WHERE ((((C.BLOG_ID = 2 )))) AND ((((C.USER_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.ID = 2; +SELECT U.*, DATE_FORMAT(U.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X, IF(U.LAST_ACTIVITY_DATE > DATE_SUB(NOW(), INTERVAL 120 SECOND), 'Y', 'N') IS_ONLINE, DATE_FORMAT(U.DATE_REGISTER, '%d.%m.%Y %H:%i:%s') DATE_REGISTER, DATE_FORMAT(U.LAST_LOGIN, '%d.%m.%Y %H:%i:%s') LAST_LOGIN, DATE_FORMAT(U.PERSONAL_BIRTHDAY, '%d.%m.%Y') PERSONAL_BIRTHDAY + + + FROM + b_user U + + + WHERE + (1=1 + AND + ( + U.ID='1' + ) + ) + ORDER BY U.ID asc; +SELECT * FROM `b_blog_user2blog` LIMIT 0; +INSERT INTO b_blog_user2blog(`USER_ID`, `BLOG_ID`) VALUES('1', '2'); +SELECT U2B.ID, U2B.BLOG_ID, U2B.USER_ID FROM b_blog_user2blog U2B WHERE U2B.ID = 1; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT U.*, DATE_FORMAT(U.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X, IF(U.LAST_ACTIVITY_DATE > DATE_SUB(NOW(), INTERVAL 120 SECOND), 'Y', 'N') IS_ONLINE, DATE_FORMAT(U.DATE_REGISTER, '%d.%m.%Y %H:%i:%s') DATE_REGISTER, DATE_FORMAT(U.LAST_LOGIN, '%d.%m.%Y %H:%i:%s') LAST_LOGIN, DATE_FORMAT(U.PERSONAL_BIRTHDAY, '%d.%m.%Y') PERSONAL_BIRTHDAY + + + FROM + b_user U + + + WHERE + (1=1 + AND + ( + U.ID='3' + ) + ) + ORDER BY U.ID asc; +SELECT * FROM `b_event` LIMIT 0; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW()) DATE_DIFF FROM b_agent WHERE ACTIVE='Y' ; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' AND B.GROUP_ID IN (1); +SELECT G.ID, G.NAME, G.SITE_ID FROM b_blog_group G WHERE G.ID = 1; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG WHERE UG.USER_ID = 1 AND UG.BLOG_ID = 0 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG INNER JOIN b_blog B ON (UG.BLOG_ID = B.ID AND B.URL='s1_blog_3') WHERE UG.USER_ID = 1 ; +SELECT 'x' FROM b_event WHERE SUCCESS_EXEC='N' LIMIT 1; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_event', 0) as L; + + SELECT ID, C_FIELDS, EVENT_NAME, MESSAGE_ID, LID, DATE_FORMAT(DATE_INSERT, '%d.%m.%Y %H:%i:%s') as DATE_INSERT, DUPLICATE + FROM b_event + WHERE SUCCESS_EXEC='N' + ORDER BY ID + LIMIT 5; +SELECT + `main_mail_internal_event_attachment`.`FILE_ID` AS `FILE_ID` +FROM `b_event_attachment` `main_mail_internal_event_attachment` + +WHERE `main_mail_internal_event_attachment`.`EVENT_ID` = 1; +SELECT + `main_site`.`SERVER_NAME` AS `SERVER_NAME`, + `main_site_culture`.`CHARSET` AS `CULTURE_CHARSET` +FROM `b_lang` `main_site` +LEFT JOIN `b_culture` `main_site_culture` ON `main_site`.`CULTURE_ID` = `main_site_culture`.`ID` +WHERE (UPPER(`main_site`.`LID`) like upper('s1')); +SELECT + `main_mail_internal_event_message`.`ID` AS `ID` +FROM `b_event_message` `main_mail_internal_event_message` +LEFT JOIN `b_event_message_site` `main_mail_internal_event_message_event_message_site` ON `main_mail_internal_event_message`.`ID` = `main_mail_internal_event_message_event_message_site`.`EVENT_MESSAGE_ID` +WHERE UPPER(`main_mail_internal_event_message`.`ACTIVE`) like upper('Y') +AND UPPER(`main_mail_internal_event_message`.`EVENT_NAME`) like upper('BLOG_YOU_TO_BLOG') +AND (UPPER(`main_mail_internal_event_message_event_message_site`.`SITE_ID`) like upper('s1')) +GROUP BY `main_mail_internal_event_message`.`ID`; +SELECT + `main_mail_internal_event_message`.`ID` AS `ID`, + `main_mail_internal_event_message`.`TIMESTAMP_X` AS `TIMESTAMP_X`, + `main_mail_internal_event_message`.`EVENT_NAME` AS `EVENT_NAME`, + `main_mail_internal_event_message`.`LID` AS `LID`, + `main_mail_internal_event_message`.`ACTIVE` AS `ACTIVE`, + `main_mail_internal_event_message`.`EMAIL_FROM` AS `EMAIL_FROM`, + `main_mail_internal_event_message`.`EMAIL_TO` AS `EMAIL_TO`, + `main_mail_internal_event_message`.`SUBJECT` AS `SUBJECT`, + `main_mail_internal_event_message`.`MESSAGE` AS `MESSAGE`, + `main_mail_internal_event_message`.`MESSAGE_PHP` AS `MESSAGE_PHP`, + `main_mail_internal_event_message`.`BODY_TYPE` AS `BODY_TYPE`, + `main_mail_internal_event_message`.`BCC` AS `BCC`, + `main_mail_internal_event_message`.`REPLY_TO` AS `REPLY_TO`, + `main_mail_internal_event_message`.`CC` AS `CC`, + `main_mail_internal_event_message`.`IN_REPLY_TO` AS `IN_REPLY_TO`, + `main_mail_internal_event_message`.`PRIORITY` AS `PRIORITY`, + `main_mail_internal_event_message`.`FIELD1_NAME` AS `FIELD1_NAME`, + `main_mail_internal_event_message`.`FIELD1_VALUE` AS `FIELD1_VALUE`, + `main_mail_internal_event_message`.`FIELD2_NAME` AS `FIELD2_NAME`, + `main_mail_internal_event_message`.`FIELD2_VALUE` AS `FIELD2_VALUE`, + `main_mail_internal_event_message`.`SITE_TEMPLATE_ID` AS `SITE_TEMPLATE_ID`, + `main_mail_internal_event_message`.`ADDITIONAL_FIELD` AS `ADDITIONAL_FIELD` +FROM `b_event_message` `main_mail_internal_event_message` + +WHERE `main_mail_internal_event_message`.`ID` = 14; +SELECT + `main_mail_internal_event_message_attachment`.`FILE_ID` AS `FILE_ID` +FROM `b_event_message_attachment` `main_mail_internal_event_message_attachment` + +WHERE `main_mail_internal_event_message_attachment`.`EVENT_MESSAGE_ID` = 14; +SELECT + `main_mail_internal_event_message_site`.`SITE_ID` AS `SITE_ID` +FROM `b_event_message_site` `main_mail_internal_event_message_site` + +WHERE `main_mail_internal_event_message_site`.`EVENT_MESSAGE_ID` = 14 +AND (UPPER(`main_mail_internal_event_message_site`.`SITE_ID`) like upper('s1')); +SELECT + `main_site`.`LID` AS `LID`, + `main_site`.`SORT` AS `SORT`, + `main_site`.`DEF` AS `DEF`, + `main_site`.`ACTIVE` AS `ACTIVE`, + `main_site`.`NAME` AS `NAME`, + `main_site`.`DIR` AS `DIR`, + `main_site`.`LANGUAGE_ID` AS `LANGUAGE_ID`, + `main_site`.`DOC_ROOT` AS `DOC_ROOT`, + `main_site`.`DOMAIN_LIMITED` AS `DOMAIN_LIMITED`, + `main_site`.`SERVER_NAME` AS `SERVER_NAME`, + `main_site`.`SITE_NAME` AS `SITE_NAME`, + `main_site`.`EMAIL` AS `EMAIL`, + `main_site`.`CULTURE_ID` AS `CULTURE_ID` +FROM `b_lang` `main_site` + +WHERE `main_site`.`LID` = 's1'; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW()) DATE_DIFF FROM b_agent WHERE ACTIVE='Y' ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW()) DATE_DIFF FROM b_agent WHERE ACTIVE='Y' ; +SELECT * FROM `b_event` LIMIT 0; +UPDATE b_event SET `DATE_EXEC` = '2016-07-24 12:33:27', `SUCCESS_EXEC` = 'Y' WHERE `ID` = '1'; +SELECT + `main_mail_internal_event_attachment`.`FILE_ID` AS `FILE_ID` +FROM `b_event_attachment` `main_mail_internal_event_attachment` + +WHERE `main_mail_internal_event_attachment`.`EVENT_ID` = 2; +SELECT + `main_site`.`SERVER_NAME` AS `SERVER_NAME`, + `main_site_culture`.`CHARSET` AS `CULTURE_CHARSET` +FROM `b_lang` `main_site` +LEFT JOIN `b_culture` `main_site_culture` ON `main_site`.`CULTURE_ID` = `main_site_culture`.`ID` +WHERE (UPPER(`main_site`.`LID`) like upper('s1')); +SELECT + `main_mail_internal_event_message`.`ID` AS `ID` +FROM `b_event_message` `main_mail_internal_event_message` +LEFT JOIN `b_event_message_site` `main_mail_internal_event_message_event_message_site` ON `main_mail_internal_event_message`.`ID` = `main_mail_internal_event_message_event_message_site`.`EVENT_MESSAGE_ID` +WHERE UPPER(`main_mail_internal_event_message`.`ACTIVE`) like upper('Y') +AND UPPER(`main_mail_internal_event_message`.`EVENT_NAME`) like upper('BLOG_USER_TO_YOUR_BLOG') +AND (UPPER(`main_mail_internal_event_message_event_message_site`.`SITE_ID`) like upper('s1')) +GROUP BY `main_mail_internal_event_message`.`ID`; +SELECT + `main_mail_internal_event_message`.`ID` AS `ID`, + `main_mail_internal_event_message`.`TIMESTAMP_X` AS `TIMESTAMP_X`, + `main_mail_internal_event_message`.`EVENT_NAME` AS `EVENT_NAME`, + `main_mail_internal_event_message`.`LID` AS `LID`, + `main_mail_internal_event_message`.`ACTIVE` AS `ACTIVE`, + `main_mail_internal_event_message`.`EMAIL_FROM` AS `EMAIL_FROM`, + `main_mail_internal_event_message`.`EMAIL_TO` AS `EMAIL_TO`, + `main_mail_internal_event_message`.`SUBJECT` AS `SUBJECT`, + `main_mail_internal_event_message`.`MESSAGE` AS `MESSAGE`, + `main_mail_internal_event_message`.`MESSAGE_PHP` AS `MESSAGE_PHP`, + `main_mail_internal_event_message`.`BODY_TYPE` AS `BODY_TYPE`, + `main_mail_internal_event_message`.`BCC` AS `BCC`, + `main_mail_internal_event_message`.`REPLY_TO` AS `REPLY_TO`, + `main_mail_internal_event_message`.`CC` AS `CC`, + `main_mail_internal_event_message`.`IN_REPLY_TO` AS `IN_REPLY_TO`, + `main_mail_internal_event_message`.`PRIORITY` AS `PRIORITY`, + `main_mail_internal_event_message`.`FIELD1_NAME` AS `FIELD1_NAME`, + `main_mail_internal_event_message`.`FIELD1_VALUE` AS `FIELD1_VALUE`, + `main_mail_internal_event_message`.`FIELD2_NAME` AS `FIELD2_NAME`, + `main_mail_internal_event_message`.`FIELD2_VALUE` AS `FIELD2_VALUE`, + `main_mail_internal_event_message`.`SITE_TEMPLATE_ID` AS `SITE_TEMPLATE_ID`, + `main_mail_internal_event_message`.`ADDITIONAL_FIELD` AS `ADDITIONAL_FIELD` +FROM `b_event_message` `main_mail_internal_event_message` + +WHERE `main_mail_internal_event_message`.`ID` = 16; +SELECT + `main_mail_internal_event_message_attachment`.`FILE_ID` AS `FILE_ID` +FROM `b_event_message_attachment` `main_mail_internal_event_message_attachment` + +WHERE `main_mail_internal_event_message_attachment`.`EVENT_MESSAGE_ID` = 16; +SELECT + `main_mail_internal_event_message_site`.`SITE_ID` AS `SITE_ID` +FROM `b_event_message_site` `main_mail_internal_event_message_site` + +WHERE `main_mail_internal_event_message_site`.`EVENT_MESSAGE_ID` = 16 +AND (UPPER(`main_mail_internal_event_message_site`.`SITE_ID`) like upper('s1')); +SELECT + `main_site`.`LID` AS `LID`, + `main_site`.`SORT` AS `SORT`, + `main_site`.`DEF` AS `DEF`, + `main_site`.`ACTIVE` AS `ACTIVE`, + `main_site`.`NAME` AS `NAME`, + `main_site`.`DIR` AS `DIR`, + `main_site`.`LANGUAGE_ID` AS `LANGUAGE_ID`, + `main_site`.`DOC_ROOT` AS `DOC_ROOT`, + `main_site`.`DOMAIN_LIMITED` AS `DOMAIN_LIMITED`, + `main_site`.`SERVER_NAME` AS `SERVER_NAME`, + `main_site`.`SITE_NAME` AS `SITE_NAME`, + `main_site`.`EMAIL` AS `EMAIL`, + `main_site`.`CULTURE_ID` AS `CULTURE_ID` +FROM `b_lang` `main_site` + +WHERE `main_site`.`LID` = 's1'; +UPDATE b_event SET `DATE_EXEC` = '2016-07-24 12:33:37', `SUCCESS_EXEC` = 'Y' WHERE `ID` = '2'; +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_event'); + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; +SELECT 'x' FROM b_event WHERE SUCCESS_EXEC='N' LIMIT 1; +SELECT B.ID, B.USER_ID, B.ALIAS, B.DESCRIPTION, B.AVATAR, B.INTERESTS, B.ALLOW_POST, DATE_FORMAT(B.LAST_VISIT, '%d.%m.%Y %H:%i:%s') as LAST_VISIT, DATE_FORMAT(B.DATE_REG, '%d.%m.%Y %H:%i:%s') as DATE_REG FROM b_blog_user B WHERE B.USER_ID = 1; +SELECT * FROM `b_blog_user` LIMIT 0; +UPDATE b_blog_user SET LAST_VISIT=now() WHERE ID = 1 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' AND B.GROUP_ID IN (1); +SELECT G.ID, G.NAME, G.SITE_ID FROM b_blog_group G WHERE G.ID = 1; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.OWNER_ID = 1 AND B.GROUP_ID IN (1); +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'K' )))) ; +SELECT COUNT(P.ID) as ID FROM b_blog_post P WHERE ((((P.BLOG_ID = 2 )))) AND ((((P.PUBLISH_STATUS = 'D' )))) AND ((((P.AUTHOR_ID = 1 )))) ; +SELECT COUNT( B.ID) as CNT FROM b_blog_user B INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID) WHERE ((((B.USER_ID = 1 )))) AND ((((U2UG.BLOG_ID = 2 )))) ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG WHERE UG.USER_ID = 1 AND UG.BLOG_ID = 0 ; +SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, B.LAST_POST_ID, B.AUTO_GROUPS, B.ALLOW_HTML, B.SEARCH_INDEX, B.SOCNET_GROUP_ID, B.USE_SOCNET, DATE_FORMAT(B.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE, DATE_FORMAT(B.DATE_UPDATE, '%d.%m.%Y %H:%i:%s') as DATE_UPDATE, DATE_FORMAT(B.LAST_POST_DATE, '%d.%m.%Y %H:%i:%s') as LAST_POST_DATE FROM b_blog B WHERE B.URL = 's1_blog_3' ; +SELECT UG.ID, UG.USER_ID, UG.BLOG_ID, UG.USER_GROUP_ID FROM b_blog_user2user_group UG INNER JOIN b_blog B ON (UG.BLOG_ID = B.ID AND B.URL='s1_blog_3') WHERE UG.USER_ID = 1 ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (6); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=6; + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Analytics\\CounterDataTable::submitData();', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(now(), INTERVAL 60 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=6; + + SELECT Q.*, + DATE_FORMAT(Q.TIMESTAMP_X, '%d.%m.%Y') TIMESTAMP_X + FROM b_vote_question Q + WHERE (1=1 + AND + ( + (Q.ACTIVE = 'Y') + ) + + AND + ( + Q.VOTE_ID = 1 + ) + ) + ORDER BY Q.C_SORT ASC; + + SELECT V.CHANNEL_ID, VQ.VOTE_ID, VA.* + FROM b_vote_answer VA + INNER JOIN b_vote_question VQ ON (VA.QUESTION_ID = VQ.ID) + INNER JOIN b_vote V ON (VQ.VOTE_ID = V.ID) + WHERE 1=1 AND ((VQ.VOTE_ID = 1)) AND ((VA.ACTIVE = 'Y')) AND ((VA.QUESTION_ID IN (1))) ORDER BY VA.C_SORT ASC; +SELECT VEQ.QUESTION_ID, VEA.ANSWER_ID, COUNT(VEA.ID) as COUNTER, MIN(TIMESTAMPDIFF(SECOND, VE.DATE_VOTE, NOW())) AS LAST_VOTE FROM b_vote_event VE INNER JOIN b_vote_event_question VEQ ON (VEQ.EVENT_ID = VE.ID) INNER JOIN b_vote_event_answer VEA ON (VEA.EVENT_QUESTION_ID = VEQ.ID) LEFT JOIN b_vote_user VU ON (VU.ID = VE.VOTE_USER_ID) WHERE 1=1 AND ((VE.VOTE_ID = 1)) AND ((VE.VALID = 'Y' )) GROUP BY VEQ.QUESTION_ID, VEA.ANSWER_ID ORDER BY COUNTER DESC; +UPDATE b_vote_user SET `LAST_IP` = '10.0.70.52', `DATE_LAST` = now(), `STAT_GUEST_ID` = '0', `AUTH_USER_ID` = '1' WHERE (ID='1') AND (AUTH_USER_ID='1'); +INSERT INTO b_vote_event(`VOTE_ID`, `VOTE_USER_ID`, `DATE_VOTE`, `STAT_SESSION_ID`, `IP`, `VALID`) VALUES (1, 1, now(), 0, '10.0.70.52', 'Y'); +INSERT INTO b_vote_event_question(`EVENT_ID`, `QUESTION_ID`) VALUES (2, 1); +INSERT INTO b_vote_event_answer(`ANSWER_ID`, `EVENT_QUESTION_ID`) VALUES (1, 2); +UPDATE b_vote SET `COUNTER` = COUNTER+1 WHERE ID='1'; +UPDATE b_vote_question SET `COUNTER` = COUNTER+1 WHERE ID in (1); +UPDATE b_vote_answer SET `COUNTER` = COUNTER+1 WHERE ID in (1); +UPDATE b_vote_user SET `DATE_LAST` = now(), `COUNTER` = COUNTER+1 WHERE ID='1'; +SELECT * FROM b_cache_tag WHERE TAG = 'vote_form_vote_1'; +DELETE FROM b_cache_tag WHERE TAG = 'vote_form_vote_1'; + + DELETE FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/e25' + AND RELATIVE_PATH = '/s1/bitrix/voting.current/ANKETA_s1/' + ; +INSERT INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) VALUES ('*', '*', '/bitrix/cache/s1/bitrix/voting.current/ANKETA_s1.~619977', '*'); +SELECT A.ID, A.MODULE_ID, A.USER_ID, B.LOGIN, B.NAME as USER_NAME, B.LAST_NAME, A.SORT, A.NAME, A.ACTIVE, DATE_FORMAT(A.LAST_EXEC, '%d.%m.%Y %H:%i:%s') as LAST_EXEC, DATE_FORMAT(A.NEXT_EXEC, '%d.%m.%Y %H:%i:%s') as NEXT_EXEC, A.AGENT_INTERVAL, A.IS_PERIOD FROM b_agent A LEFT JOIN b_user B ON(A.USER_ID = B.ID) WHERE A.NAME LIKE '\\\\Bitrix\\\\Main\\\\Data\\\\CacheEngineFiles::delayedDelete(%' ORDER BY A.ID DESC; + + SELECT ID + FROM b_agent + WHERE NAME = '\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete();' + AND USER_ID IS NULL; +INSERT INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) VALUES ('*', '*', '/bitrix/managed_cache/MYSQL/agents.~947835', '*'); +SELECT * FROM `b_agent` LIMIT 0; +INSERT INTO b_agent(`MODULE_ID`, `SORT`, `NAME`, `ACTIVE`, `NEXT_EXEC`, `AGENT_INTERVAL`, `IS_PERIOD`, `USER_ID`) VALUES('main', '100', '\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete();', 'Y', CURRENT_DATE, '1', 'Y', NULL ); + + DELETE FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/e25' + AND RELATIVE_PATH = '/s1/bitrix/voting.result/1' + ; +INSERT INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) VALUES ('*', '*', '/bitrix/cache/s1/bitrix/voting.result/1.~485621', '*'); + + DELETE FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/e25' + AND RELATIVE_PATH = '/s1/bitrix/voting.form' + ; +INSERT INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) VALUES ('*', '*', '/bitrix/cache/s1/bitrix/voting.form.~227422', '*'); +INSERT INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) VALUES ('*', '*', '/bitrix/managed_cache/MYSQL/b_vote.~855528', '*'); + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; + + SELECT VV.*, C.TITLE as CHANNEL_TITLE, C.ACTIVE as CHANNEL_ACTIVE, + C.HIDDEN as CHANNEL_HIDDEN, V.*, + CASE WHEN (C.ACTIVE = 'Y' AND V.ACTIVE = 'Y' AND V.DATE_START <= NOW() AND NOW() <= V.DATE_END) + THEN IF (C.VOTE_SINGLE != 'Y', 'green', 'yellow') + ELSE 'red' + END AS LAMP, + DATE_FORMAT(V.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X, + DATE_FORMAT(V.DATE_START, '%d.%m.%Y %H:%i:%s') DATE_START, + DATE_FORMAT(V.DATE_END, '%d.%m.%Y %H:%i:%s') DATE_END, + UNIX_TIMESTAMP(V.DATE_END) - UNIX_TIMESTAMP(V.DATE_START) PERIOD + FROM ( + SELECT V.ID, COUNT(Q.ID) QUESTIONS + FROM b_vote V + INNER JOIN b_vote_channel C ON (C.ID=V.CHANNEL_ID) + LEFT JOIN b_vote_question Q ON (Q.VOTE_ID=V.ID) + WHERE (1=1 + AND + ( + ( + (V.CHANNEL_ID='1' and V.CHANNEL_ID is not null) + ) + ) + + AND + ( + (V.ACTIVE='Y' and now()>=V.DATE_START and now()<=V.DATE_END) + ) + ) + GROUP BY V.ID + ) VV + INNER JOIN b_vote V ON (V.ID = VV.ID) + INNER JOIN b_vote_channel C ON (C.ID = V.CHANNEL_ID) ORDER BY V.ID desc ; +SELECT MAX(V.ID) AS ACTIVE_VOTE_ID FROM b_vote V WHERE V.CHANNEL_ID=1 AND V.ACTIVE = 'Y' AND NOW() >= V.DATE_START AND V.DATE_END >= NOW(); + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/e25' + AND RELATIVE_PATH = '/s1/bitrix/voting.current/ANKETA_s1/' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/e25', '/s1/bitrix/voting.current/ANKETA_s1/', 'vote_form_channel_1'), +('s1', '/e25', '/s1/bitrix/voting.current/ANKETA_s1/', 'vote_form_vote_1'); + + SELECT V.*, + C.TITLE as CHANNEL_TITLE, + C.SYMBOLIC_NAME as CHANNEL_SYMBOLIC_NAME, + C.C_SORT as CHANNEL_C_SORT, + C.FIRST_SITE_ID as CHANNEL_FIRST_SITE_ID, + C.ACTIVE as CHANNEL_ACTIVE, + C.HIDDEN as CHANNEL_HIDDEN, + C.TITLE as CHANNEL_TITLE, + C.VOTE_SINGLE as CHANNEL_VOTE_SINGLE, + C.USE_CAPTCHA as CHANNEL_USE_CAPTCHA, + DATE_FORMAT(V.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X, + DATE_FORMAT(V.DATE_START, '%d.%m.%Y %H:%i:%s') DATE_START, + DATE_FORMAT(V.DATE_END, '%d.%m.%Y %H:%i:%s') DATE_END, + CASE WHEN (C.ACTIVE = 'Y' AND V.ACTIVE = 'Y' AND V.DATE_START <= NOW() AND NOW() <= V.DATE_END) + THEN IF (C.VOTE_SINGLE != 'Y', 'green', 'yellow') + ELSE 'red' + END AS LAMP + FROM b_vote V + INNER JOIN b_vote_channel C ON (V.CHANNEL_ID = C.ID) + WHERE 1=1 AND ((V.ID = 1)) ORDER BY V.ID ASC; + + SELECT Q.*, + DATE_FORMAT(Q.TIMESTAMP_X, '%d.%m.%Y') TIMESTAMP_X + FROM b_vote_question Q + WHERE (1=1 + AND + ( + (Q.ACTIVE = 'Y') + ) + + AND + ( + Q.VOTE_ID = 1 + ) + ) + ORDER BY Q.C_SORT ASC; + + SELECT V.CHANNEL_ID, VQ.VOTE_ID, VA.* + FROM b_vote_answer VA + INNER JOIN b_vote_question VQ ON (VA.QUESTION_ID = VQ.ID) + INNER JOIN b_vote V ON (VQ.VOTE_ID = V.ID) + WHERE 1=1 AND ((VQ.VOTE_ID = 1)) AND ((VA.ACTIVE = 'Y')) AND ((VA.QUESTION_ID IN (1))) ORDER BY VA.C_SORT ASC; +SELECT VEQ.QUESTION_ID, VEA.ANSWER_ID, COUNT(VEA.ID) as COUNTER, MIN(TIMESTAMPDIFF(SECOND, VE.DATE_VOTE, NOW())) AS LAST_VOTE FROM b_vote_event VE INNER JOIN b_vote_event_question VEQ ON (VEQ.EVENT_ID = VE.ID) INNER JOIN b_vote_event_answer VEA ON (VEA.EVENT_QUESTION_ID = VEQ.ID) LEFT JOIN b_vote_user VU ON (VU.ID = VE.VOTE_USER_ID) WHERE 1=1 AND ((VE.VOTE_ID = 1)) AND ((VE.VALID = 'Y' )) GROUP BY VEQ.QUESTION_ID, VEA.ANSWER_ID ORDER BY COUNTER DESC; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/e25' + AND RELATIVE_PATH = '/s1/bitrix/voting.result/1' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/e25', '/s1/bitrix/voting.result/1', 'vote_form_channel_1'), +('s1', '/e25', '/s1/bitrix/voting.result/1', 'vote_form_vote_1'), +('s1', '/e25', '/s1/bitrix/voting.result/1', 'vote_form_question_1'); +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (21); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=21; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +UPDATE b_cache_tag SET RELATIVE_PATH='5:1469352825' WHERE TAG='**'; + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete(1);', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL 1 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=21; + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; + + SELECT Q.*, + DATE_FORMAT(Q.TIMESTAMP_X, '%d.%m.%Y') TIMESTAMP_X + FROM b_vote_question Q + WHERE (1=1 + AND + ( + (Q.ACTIVE = 'Y') + ) + + AND + ( + Q.VOTE_ID = 1 + ) + ) + ORDER BY Q.C_SORT ASC; + + SELECT V.CHANNEL_ID, VQ.VOTE_ID, VA.* + FROM b_vote_answer VA + INNER JOIN b_vote_question VQ ON (VA.QUESTION_ID = VQ.ID) + INNER JOIN b_vote V ON (VQ.VOTE_ID = V.ID) + WHERE 1=1 AND ((VQ.VOTE_ID = 1)) AND ((VA.ACTIVE = 'Y')) AND ((VA.QUESTION_ID IN (1))) ORDER BY VA.C_SORT ASC; +SELECT VEQ.QUESTION_ID, VEA.ANSWER_ID, COUNT(VEA.ID) as COUNTER, MIN(TIMESTAMPDIFF(SECOND, VE.DATE_VOTE, NOW())) AS LAST_VOTE FROM b_vote_event VE INNER JOIN b_vote_event_question VEQ ON (VEQ.EVENT_ID = VE.ID) INNER JOIN b_vote_event_answer VEA ON (VEA.EVENT_QUESTION_ID = VEQ.ID) LEFT JOIN b_vote_user VU ON (VU.ID = VE.VOTE_USER_ID) WHERE 1=1 AND ((VE.VOTE_ID = 1)) AND ((VE.VALID = 'Y' )) GROUP BY VEQ.QUESTION_ID, VEA.ANSWER_ID ORDER BY COUNTER DESC; + + SELECT TAG + FROM b_cache_tag + WHERE SITE_ID = 's1' + AND CACHE_SALT = '/e25' + AND RELATIVE_PATH = '/s1/bitrix/voting.form' + ; + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/e25', '/s1/bitrix/voting.form', 'vote_form_channel_1'); + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/e25', '/s1/bitrix/voting.form', 'vote_form_vote_1'); + + INSERT IGNORE INTO b_cache_tag (SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG) + VALUES + ('s1', '/e25', '/s1/bitrix/voting.form', 'vote_form_question_1'); +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (21); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=21; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +DELETE FROM b_cache_tag + WHERE SITE_ID = '*' + AND CACHE_SALT = '*' + AND RELATIVE_PATH = '/bitrix/cache/s1/bitrix/voting.current/ANKETA_s1.~619977'; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +UPDATE b_cache_tag SET RELATIVE_PATH='4:1469352827' WHERE TAG='**'; + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete(1);', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL 1 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=21; + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; + + SELECT DISTINCT + B.* + ,B.XML_ID as EXTERNAL_ID + ,DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X + ,L.DIR as LANG_DIR + ,L.SERVER_NAME + FROM + b_iblock B + INNER JOIN b_lang L ON L.LID=B.LID + WHERE 1 = 1 + + AND ((((B.ACTIVE='Y')))) AND ((((B.ID = '2')))) + ; +SET NAMES 'utf8'; +SET collation_connection = "utf8_unicode_ci"; + + SELECT 'x' + FROM b_agent + WHERE + ACTIVE = 'Y' + AND NEXT_EXEC <= now() + AND (DATE_CHECK IS NULL OR DATE_CHECK <= now()) + + LIMIT 1 + ; +SELECT GET_LOCK('cff29ec0118154ee0dcf115d29478b29_agent', 0) as L; +SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID FROM b_agent WHERE ACTIVE='Y' AND NEXT_EXEC<=now() AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ORDER BY RUNNING ASC, SORT desc; +UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (21); +SELECT RELEASE_LOCK('cff29ec0118154ee0dcf115d29478b29_agent'); +UPDATE b_agent SET RUNNING='Y' WHERE ID=21; +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + +SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'; +SELECT count(1) CNT from b_cache_tag WHERE TAG='*' +LIMIT 0, 1; + + + UPDATE b_agent SET + NAME='\\Bitrix\\Main\\Data\\CacheEngineFiles::delayedDelete(1);', + LAST_EXEC=now(), + NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL 1 SECOND), + DATE_CHECK=NULL, + RUNNING='N' + WHERE ID=21; +DELETE FROM b_admin_notify_lang WHERE NOTIFY_ID IN (SELECT ID FROM b_admin_notify WHERE TAG like '%PHOTOGALLERY_UPLOADER%'); +DELETE FROM b_admin_notify WHERE TAG like '%PHOTOGALLERY_UPLOADER%'; +SELECT L.*, L.LID as ID, L.LID as LANGUAGE_ID, C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_language L, b_culture C WHERE C.ID = L.CULTURE_ID ORDER BY L.LID ; +SELECT * FROM `b_admin_notify` LIMIT 0; +SELECT L.*, L.LID as ID, L.LID as LANGUAGE_ID, C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_language L, b_culture C WHERE C.ID = L.CULTURE_ID ORDER BY L.LID ; +SELECT DISTINCT BS.ID AS ID, +BS.ACTIVE AS ACTIVE, +BS.CREATED_BY AS CREATED_BY, +BS.IBLOCK_SECTION_ID AS IBLOCK_SECTION_ID, +BS.NAME AS NAME, +BS.PICTURE AS PICTURE, +BS.DESCRIPTION AS DESCRIPTION, +BS.DESCRIPTION_TYPE AS DESCRIPTION_TYPE, +BS.CODE AS CODE, +BS.SOCNET_GROUP_ID AS SOCNET_GROUP_ID, +DATE_FORMAT(BS.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') AS TIMESTAMP_X + FROM b_iblock_section BS + INNER JOIN b_iblock B ON BS.IBLOCK_ID = B.ID + + + WHERE 1=1 + + + AND ((((BS.IBLOCK_ID = '9')))) + AND ((((BS.CREATED_BY = '1')))) + AND (((BS.SOCNET_GROUP_ID IS NULL))) + AND (((BS.IBLOCK_SECTION_ID IS NULL))) + AND ((((B.ID = '9')))) + AND ((((B.ACTIVE='Y')))) + + ORDER BY BS.TIMESTAMP_X desc , BS.ID desc ; + + SELECT BP.* + FROM b_iblock_property BP + + WHERE BP.ACTIVE = 'Y' + AND BP.VERSION = 2 + AND BP.IBLOCK_ID = 9 + + ORDER BY BP.SORT ASC + ; +SELECT COUNT('x') as C + FROM + b_iblock B + INNER JOIN b_lang L ON B.LID=L.LID + INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID + + + WHERE 1=1 + AND ( + + ((((BE.IBLOCK_ID = '9')))) + AND ( + + ((BE.IN_SECTIONS='N' OR EXISTS ( + SELECT BSE.IBLOCK_ELEMENT_ID + FROM b_iblock_section_element BSE + + INNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID + + WHERE BSE.IBLOCK_ELEMENT_ID = BE.ID + AND ((BS.ACTIVE = 'Y')) + ))) + ) + ) + AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL))) + + ; +SELECT BE.ID as ID,BE.CODE as CODE,BE.IBLOCK_ID as IBLOCK_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID,BE.NAME as NAME,BE.ACTIVE as ACTIVE,BE.DETAIL_PICTURE as DETAIL_PICTURE,BE.PREVIEW_PICTURE as PREVIEW_PICTURE,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.DETAIL_TEXT as DETAIL_TEXT,DATE_FORMAT(BE.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE,BE.CREATED_BY as CREATED_BY,BE.SHOW_COUNTER as SHOW_COUNTER,BE.SORT as SORT,BE.TAGS as TAGS,DATE_FORMAT(BE.DATE_CREATE, '%Y.%m.%d') as CREATED_DATE,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE + FROM + b_iblock B + INNER JOIN b_lang L ON B.LID=L.LID + INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID + + + WHERE 1=1 + AND ( + + ((((BE.IBLOCK_ID = '9')))) + AND ( + + ((BE.IN_SECTIONS='N' OR EXISTS ( + SELECT BSE.IBLOCK_ELEMENT_ID + FROM b_iblock_section_element BSE + + INNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID + + WHERE BSE.IBLOCK_ELEMENT_ID = BE.ID + AND ((BS.ACTIVE = 'Y')) + ))) + ) + ) + AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL))) + + ORDER BY DATE_FORMAT(BE.DATE_CREATE, '%Y.%m.%d') desc ,BE.ID asc LIMIT 0, 45; + + SELECT BP.*, BEP.ID as PROPERTY_VALUE_ID, BEP.VALUE, BEP.DESCRIPTION, BEPE.VALUE VALUE_ENUM, BEPE.XML_ID VALUE_XML_ID, BEPE.SORT VALUE_SORT + FROM b_iblock B + INNER JOIN b_iblock_property BP ON B.ID=BP.IBLOCK_ID + LEFT JOIN b_iblock_element_property BEP ON (BP.ID = BEP.IBLOCK_PROPERTY_ID AND BEP.IBLOCK_ELEMENT_ID = 103) + LEFT JOIN b_iblock_property_enum BEPE ON (BP.PROPERTY_TYPE = 'L' AND BEPE.ID=BEP.VALUE_ENUM AND BEPE.PROPERTY_ID=BP.ID) + WHERE B.ID = 9 + AND BP.ACTIVE='Y' + + ORDER BY BP.SORT asc, BP.ID asc, BEPE.SORT asc, BEP.ID asc; +SELECT DISTINCT BS.ID AS ID, +BS.LEFT_MARGIN AS LEFT_MARGIN, +BS.RIGHT_MARGIN AS RIGHT_MARGIN, +BS.NAME AS NAME, +BS.ACTIVE AS ACTIVE + FROM b_iblock_section BS + INNER JOIN b_iblock B ON BS.IBLOCK_ID = B.ID + + + WHERE 1=1 + + + AND ((((BS.IBLOCK_ID = '9')))) + AND ((((BS.ID = '96')))) + AND ((((B.ID = '9')))) + ; +SELECT DISTINCT + BS.*, + B.LIST_PAGE_URL, + B.SECTION_PAGE_URL, + B.IBLOCK_TYPE_ID, + B.CODE as IBLOCK_CODE, + B.XML_ID as IBLOCK_EXTERNAL_ID, + BS.XML_ID as EXTERNAL_ID, + DATE_FORMAT(BS.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X, + DATE_FORMAT(BS.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE + + FROM b_iblock_section BS + INNER JOIN b_iblock B ON BS.IBLOCK_ID = B.ID + + + WHERE 1=1 + + + AND ((((BS.IBLOCK_ID = '9')))) + AND ((((BS.ID = '96')))) + AND ((((B.ACTIVE='Y')))) + AND ((((B.ID = '9')))) + ; + + SELECT STRAIGHT_JOIN COUNT(DISTINCT BE.ID) as CNT + FROM b_iblock_section BS + INNER JOIN b_iblock_section BSTEMP ON (BSTEMP.IBLOCK_ID=BS.IBLOCK_ID + AND BSTEMP.LEFT_MARGIN >= BS.LEFT_MARGIN + AND BSTEMP.RIGHT_MARGIN <= BS.RIGHT_MARGIN) + INNER JOIN b_iblock_section_element BSE ON BSE.IBLOCK_SECTION_ID=BSTEMP.ID + INNER JOIN b_iblock_element BE ON BE.ID=BSE.IBLOCK_ELEMENT_ID AND BE.IBLOCK_ID=BS.IBLOCK_ID + + WHERE BS.ID=96 + AND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL ) + OR BE.WF_NEW='Y' ) + + ; + + SELECT + + BS.*, + B.LIST_PAGE_URL, + B.SECTION_PAGE_URL, + B.IBLOCK_TYPE_ID, + B.CODE as IBLOCK_CODE, + B.XML_ID as IBLOCK_EXTERNAL_ID, + BS.XML_ID as EXTERNAL_ID + + FROM + b_iblock_section BS + INNER JOIN b_iblock B ON B.ID = BS.IBLOCK_ID + WHERE BS.ID=96 + AND BS.IBLOCK_ID=9 + ; + + SELECT + + BS.*, + B.LIST_PAGE_URL, + B.SECTION_PAGE_URL, + B.IBLOCK_TYPE_ID, + B.CODE as IBLOCK_CODE, + B.XML_ID as IBLOCK_EXTERNAL_ID, + BS.XML_ID as EXTERNAL_ID + + FROM + b_iblock_section BS + INNER JOIN b_iblock B ON B.ID = BS.IBLOCK_ID + WHERE BS.ID=95 + AND BS.IBLOCK_ID=9; +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/case_sensitive_sql.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/case_sensitive_sql.sql new file mode 100644 index 0000000000..2371690cc9 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/case_sensitive_sql.sql @@ -0,0 +1,4 @@ +SeleCT * frOm someID whErE someexpr > coname orDer bY 1; +upDaTe tbl SeT col=11 wherE col2 > 1; +DeleTE t1.*, t2 from t1 join t3 on t1.col1 = t3.col1 jOin t2 oN t2.col2 = t3.col2 where t3.co4 is NoT nULl; +InsERT iNtO t(coL1, cOl2, CoL3, Col4) ValUes (1, 2, 3, 4), (sQRt(5), aBs(10-poWeR(3,4)), cEIL(rAnD()*100) , (sIn(0.5*3.413234) + coS(100 MoD 33)) +lOG(pI()*eXp(AcOS(10)*AtAn(10))) ); \ No newline at end of file diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_alter.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_alter.sql new file mode 100644 index 0000000000..01cb34b436 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_alter.sql @@ -0,0 +1,62 @@ +#begin +-- Alter Table +alter table ship_class add column ship_spec varchar(150) first, add somecol int after start_build; +alter table t3 add column (c2 decimal(10, 2) comment 'comment`' null, c3 enum('abc', 'cba', 'aaa')), add index t3_i1 using btree (c2) comment 'some index'; +alter table t2 add constraint t2_pk_constraint primary key (1c), alter column `_` set default 1; +alter table ship_class change column somecol col_for_del tinyint first; +alter table ship_class drop col_for_del; +alter table t3 drop index t3_i1; +alter table childtable drop index fk_idParent_parentTable; +alter table t2 drop primary key; +alter table t3 rename to table3column; +alter table childtable add constraint `fk1` foreign key (idParent) references parenttable(id) on delete restrict on update cascade; +alter table table3column default character set = cp1251; +#end +#begin +-- Alter database +alter database test default character set = utf8; +alter schema somedb_name upgrade data directory name; +#end +#begin +-- Alter event +alter definer = current_user event someevent on schedule at current_timestamp + interval 30 minute; +alter definer = 'ivan'@'%' event someevent on completion preserve; +alter definer = 'ivan'@'%' event someevent rename to newsomeevent; +alter event newsomeevent enable comment 'some comment'; +-- delimiter // +alter definer = current_user event newsomeevent on schedule at current_timestamp + interval 2 hour +rename to someevent disable +do begin update test.t2 set 1c = 1c + 1; end; -- // +-- delimiter ; +#end +#begin +-- Alter function/procedure +alter function f_name comment 'some funct' language sql sql security invoker; +alter function one_more_func contains sql sql security definer; +alter procedure p_name comment 'some funct' language sql sql security invoker; +alter procedure one_more_proc contains sql sql security definer; +#end +#begin +-- Alter logfile group +-- http://dev.mysql.com/doc/refman/5.6/en/alter-logfile-group.html +ALTER LOGFILE GROUP lg_3 ADD UNDOFILE 'undo_10.dat' INITIAL_SIZE=32M ENGINE=NDBCLUSTER; +ALTER LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_10.dat' wait ENGINE=NDB; +#end +#begin +-- Alter server +-- http://dev.mysql.com/doc/refman/5.6/en/alter-server.html +ALTER SERVER s OPTIONS (USER 'sally'); +#end +#begin +-- Alter tablespace +alter tablespace tblsp_1 add datafile 'filename' engine = ndb; +alter tablespace tblsp_2 drop datafile 'deletedfilename' wait engine ndb; +#end +#begin +-- Alter view +alter view my_view1 as select 1 union select 2 limit 0,5; +alter algorithm = merge view my_view2(col1, col2) as select * from t2 with check option; +alter definer = 'ivan'@'%' view my_view3 as select count(*) from t3; +alter definer = current_user sql security invoker view my_view4(c1, 1c, _, c1_2) + as select * from (t1 as tt1, t2 as tt2) inner join t1 on t1.col1 = tt1.col1; +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_create.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_create.sql new file mode 100644 index 0000000000..acad2995d9 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_create.sql @@ -0,0 +1,95 @@ +#begin +-- Create Table +create table new_t (like t1); +create table log_table(row varchar(512)); +create table ships(name varchar(255), class_id int, id int); +create table ships_guns(guns_id int, ship_id int); +create table guns(id int, power decimal(7,2), callibr decimal(10,3)); +create table ship_class(id int, class_name varchar(100), tonange decimal(10,2), max_length decimal(10,2), start_build year, max_guns_size int); +create table `some table $$`(id int auto_increment key, class varchar(10), data binary) engine=MYISAM; +create table `parent_table`(id int primary key, column1 varchar(30), index parent_table_i1(column1(20)), check(char_length(column1)>10)) engine InnoDB; +create table child_table(id int unsigned auto_increment primary key, id_parent int references parent_table(id) match full on update cascade on delete set null) engine=InnoDB; +create table `another some table $$` like `some table $$`; +#end +#begin +-- Rename table +-- http://dev.mysql.com/doc/refman/5.6/en/rename-table.html +RENAME TABLE old_table TO tmp_table, new_table TO old_table, tmp_table TO new_table; +RENAME TABLE table_b TO table_a; +RENAME TABLE current_db.tbl_name TO other_db.tbl_name; +#end +#begin +-- Truncate table +truncate table t1; +truncate parent_table; +truncate `#`; +truncate `#!^%$`; +#end +#begin +-- Create database +create database somedb; +create schema if not exists myschema; +create schema `select` default character set = utf8; +create database if not exists `current_date` character set cp1251; +create database super default character set utf8 collate = utf8_bin character set utf8 collate utf8_bin; +#end +#begin +-- Create event 1 +-- delimiter // +create definer = current_user event if not exists someevent on schedule at current_timestamp + interval 30 minute +on completion preserve do begin insert into test.t1 values (33), (111);select * from test.t1; end; -- // +#end +#begin +-- Create event 2 +create definer = 'ivan'@'%' event testevent1 on schedule every 1 hour ends '2016-11-05 23:59:00' +do begin select * from test.t2; end; -- // +#end +#begin +-- Create event 3 +create definer = current_user() event testevent2 on schedule at '2016-11-03 23:59:00' +do begin update test.t2 set 1c = 1c + 1; end; -- // +-- delimiter ; +#end +#begin +-- Create index +create index index1 on t1(col1) comment 'test index' comment 'some test' using btree; +create unique index index2 using btree on t2(1c desc, `_` asc); +create index index3 using hash on antlr_tokens(token(30) asc); +#end +#begin +-- Create logfile group +-- http://dev.mysql.com/doc/refman/5.6/en/create-logfile-group.html +CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' INITIAL_SIZE = 10M ENGINE = InnoDB; +-- CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' INITIAL_SIZE = 10M; +CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' INITIAL_SIZE = 10000000 ENGINE = NDB; +#end +#begin +-- Create server +-- http://dev.mysql.com/doc/refman/5.6/en/create-server.html +CREATE SERVER s +FOREIGN DATA WRAPPER mysql +OPTIONS (USER 'Remote', HOST '192.168.1.106', DATABASE 'test'); +#end +#begin +-- Create tablespace +create tablespace tblsp1 add datafile 'tblsp_work1' use logfile group lg_1 initial_size = 4G engine MYISAM; +create tablespace tblsp2 add datafile 'tblsp_proj1' use logfile group lg_6 autoextend_size = 4294 max_size = 2294967296 engine NDB; +#end +#begin +-- Create trigger 1 +-- delimiter // +create trigger trg_my1 before delete on test.t1 for each row begin insert into log_table values ("delete row from test.t1"); insert into t4 values (old.col1, old.col1 + 5, old.col1 + 7); end; -- //-- delimiter ; +#end +#begin +-- Create trigger 2 +create definer = current_user() trigger trg_my2 after insert on test.t2 for each row insert into log_table values (concat("inserted into table test.t2 values: (1c, _) = (", cast(NEW.col1 as char(100)), ", ", convert(new.`_`, char(100)), ")")); +#end +#begin +-- Create view +create or replace view my_view1 as select 1 union select 2 limit 0,5; +create algorithm = merge view my_view2(col1, col2) as select * from t2 with check option; +create or replace definer = 'ivan'@'%' view my_view3 as select count(*) from t3; +create or replace definer = current_user sql security invoker view my_view4(c1, 1c, _, c1_2) + as select * from (t1 as tt1, t2 as tt2) inner join t1 on t1.col1 = tt1.col1; + +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_drop.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_drop.sql new file mode 100644 index 0000000000..a37c27bae9 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ddl_drop.sql @@ -0,0 +1,64 @@ +#begin +-- Drop table +drop temporary table if exists temp_t1; +drop temporary table `some_temp_table`; +-- drop table if exists `one_more 1343 *&&^ table`; +drop table antlr_all_tokens, antlr_function_tokens, antlr_keyword_tokens, antlr_tokens, childtable, guns, log_table, new_t, parenttable, ship_class, ships, ships_guns, t1, t2, t3, t4, tab1; +#end +#begin +-- Drop database +drop database somedb; +drop schema if exists myschema; +drop database if exists `select`; +drop schema `current_date`; +drop schema if exists `super`; +#end +#begin +-- Drop event +drop event if exists testevent1; +drop event if exists testevent2; +drop event someevent; +#end +#begin +-- Drop index +drop index index1 on t1 algorithm=default; +drop index index2 on t2 algorithm=default lock none; +drop index index3 on antlr_tokens algorithm default lock=none; +#end +#begin +-- Drop logfile group +-- http://dev.mysql.com/doc/refman/5.6/en/create-logfile-group.html +DROP LOGFILE GROUP lg1 ENGINE = NDB; +#end +#begin +-- Drop server +drop server if exists s; +drop server some_server_name_enough_character_length; +#end +#begin +-- Drop tablespace +drop tablespace tblsp1 engine = NDB; +drop tablespace tblsp2 engine = InnoDB; +#end +#begin +-- Drop trigger +drop trigger if exists test.trg_my1; +drop trigger trg_my2; +#end +#begin +-- Drop view +drop view if exists my_view1, my_view2, my_view3, my_view4; +drop view some_view restrict; +drop view if exists `view`, one_more_view, 1view cascade; +#end +#begin +-- Drop procedure +drop procedure if exists some_proc; +drop procedure some_proc; +#end +#begin +-- Drop function +drop function if exists foo; +drop function bar; + +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_delete.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_delete.sql new file mode 100644 index 0000000000..99a0a51181 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_delete.sql @@ -0,0 +1,17 @@ +#begin +-- delete one-table syntax +delete from t1 where col1 = true and (col2 - col3 <= (select count(*) from t2) or maincol/2 > 100.2); +delete low_priority from mytable where value_col > 0 order by sort_col desc limit 10; +delete quick ignore from test.parenttable where id*2 + somecol < 10; +#end +#begin +-- delete multiple-table syntax +delete ignore t1.*, alias_t2 from t1 inner join t3 on t1.col1 = t3.somecol and t1.col2 > t3.col_for_compare left join t2 as alias_t2 on t1.col1 <= alias_t2.col1 and alias_t2.col_onecol + t3.col_for_compare <> t1.sum_col +where alias_t2.not_null_col is not null and t1.primary_key_column >= 100; +-- http://dev.mysql.com/doc/refman/5.6/en/delete.html +DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id; +DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id; +DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL; +DELETE a1, a2 FROM t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id; +DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id; +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_insert.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_insert.sql new file mode 100644 index 0000000000..87c68451d1 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_insert.sql @@ -0,0 +1,44 @@ +#begin +-- insert on select +insert into t1 select * from t2; +insert into some_ship_info +select ship_power.gun_power, ship_info.* +FROM + ( + select s.name as ship_name, sum(g.power) as gun_power, max(callibr) as max_callibr + from + ships s inner join ships_guns sg on s.id = sg.ship_id inner join guns g on g.id = sg.guns_id + group by s.name + ) ship_power + inner join + ( + select s.name as ship_name, sc.class_name, sc.tonange, sc.max_length, sc.start_build, sc.max_guns_size + from + ships s inner join ship_class sc on s.class_id = sc.id + ) ship_info using (ship_name); + +INSERT INTO l4stal13prema00.`fusion` ( `partition en` , `classe` , `segment` , `F tot` , `F loc` , `indice specif` ) +SELECT * FROM f3p1 WHERE 1; +#end +#begin +-- insert base syntax +insert ignore into t1(col1, col2, col3) values ('abc', 0, .12), ('adfasdf',23432, -.12); +-- http://dev.mysql.com/doc/refman/5.6/en/insert.html +INSERT INTO tbl_name (col1,col2) VALUES(col2*2, 15); +INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); +INSERT INTO logs (`site_id`, `time`,`hits`) VALUES (1,"2004-08-09", 15) ON DUPLICATE KEY UPDATE hits=hits+15; +INSERT INTO t2 (b, c) + VALUES ((SELECT a FROM t1 WHERE b='Chip'), 'shoulder'), + ((SELECT a FROM t1 WHERE b='Chip'), 'old block'), + ((SELECT a FROM t1 WHERE b='John'), 'toilet'), + ((SELECT a FROM t1 WHERE b='John'), 'long,silver'), + ((SELECT a FROM t1 WHERE b='John'), 'li''l'); +INSERT INTO tbl_test (FirstName) +SELECT 'Aleem' UNION ALL SELECT 'Latif' UNION ALL SELECT 'Mughal'; + +#end +#begin +-- not latin1 literals +insert into t values ('кириллица', 2, 3); +insert INTO `wptests_posts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (7, '2016-09-06 16:49:51', '2016-09-06 16:49:51', '', '', 'صورة', '', 'inherit', 'attachment', 'open', 'closed', '', '%d8%b5%d9%88%d8%b1%d8%a9', '', '', '2016-09-06 16:49:51', '2016-09-06 16:49:51', 0, 0, 'image/jpeg', ''); +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_replace.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_replace.sql new file mode 100644 index 0000000000..55c39c5924 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_replace.sql @@ -0,0 +1,13 @@ +#begin +replace into t1 values (default, 1, '2', abs(-10 * col1) + sqrt(col2/col3)); +replace table1(col1, col2, col3) value (1, 2, 3), (4, 5, 6), (7, 8, 9); +replace into t2(str1, str2) values (null, 'abc'), ('some' ' string' ' to replace', @someval); +replace into new_t select * from old_t; +#end +#begin +-- http://dev.mysql.com/doc/refman/5.6/en/replace.html +REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00'); +REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42'); +REPLACE INTO T SELECT * FROM T; +REPLACE LOW_PRIORITY INTO `online_users` SET `session_id`='3580cc4e61117c0785372c426eddd11c', `user_id` = 'XXX', `page` = '/', `lastview` = NOW(); +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_select.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_select.sql new file mode 100644 index 0000000000..1529362be6 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_select.sql @@ -0,0 +1,128 @@ +#begin +-- common conustructions tests +-- -- Literals +-- -- -- String literal +SELECT 'hello world'; +select N'testing conflict on N - spec symbol and N - as identifier' as n; +select n'abc' as tstConstrN; +select N'abc' "bcd" 'asdfasdf' as tstConstNAndConcat; +select 'afdf' "erwhg" "ads" 'dgs' "rter" as tstDiffQuoteConcat; +select 'some string' COLLATE latin1_danish_ci as tstCollate; +select _latin1'some string' COLLATE latin1_danish_ci as tstCollate; +select '\'' as c1, '\"' as c2, '\b' as c3, '\n' as c4, '\r' as c5, '\t' as c6, '\Z' as c7, '\\' as c8, '\%' as c9, '\_' as c10; +#end +#begin +-- -- -- String literal spec symbols +-- bug: two symbols ' afer each other: '' +select '\'Quoted string\'' col1, 'backslash \\ ' ', two double quote "" ' ', two single quote ''' as col2; +select '\'Quoted string\' ' col1, 'backslash \\ ' ', two double quote "" ' ', two single quote ''' as col2; +select * from `select` where `varchar` = 'abc \' ' and `varchar2` = '\'bca'; +#end +#begin +-- -- -- Number literal +SELECT 1; +select 1.e-3 as 123e; +select del1.e123 as c from del1; +select -1, 3e-2, 2.34E0; +SELECT -4.1234e-2, 0.2e-3 as c; +SELECT .1e10; +SELECT -.1e10; +select 15e3, .2e5 as col1; +select .2e3 c1, .2e-4 as c5; +#end +#begin +-- -- -- Number float collision test +select t1e2 as e1 from t; +select 1e2t as col from t; +#end +#begin +-- -- -- Hexadecimal literal +select X'4D7953514C'; +select x'4D7953514C'; +select 0x636174; +select 0x636174 c1; +select x'4D7953514C' c1, 0x636174 c2; +select x'79' as `select`, 0x2930 cc, 0x313233 as c2; + +#end +#begin +-- -- -- Null literal +SELECT null; +SELECT not null; +select \N; +select ((\N)); +select not ((\N)); +#end +#begin +-- -- -- mixed literals +select \N as c1, null as c2, N'string'; +select 4e15 colum, 'hello, ' 'world', X'53514C'; +select 'abc' ' bcd' ' \' \' ' as col, \N c2, -.1e-3; +#end + +#begin +-- -- Variables +SELECT @myvar; +#end + +#begin +-- select_column tests +select * from `select`; +select *, `select`.*, `select`.* from `select`; +select *, 'abc' from `select`; +select *, 1, \N, N'string' 'string2' from `select`; +#end + +#begin +-- UNION tests +select 1 union select 2 limit 0,5; +select * from (select 1 union select 2 union select 0) as t order by 1 limit 0,10; +select col1 from t1 union select * from (select 1 as col2) as newt; +select col1 from t1 union (select * from (select 1 as col2) as newt); +select 1 as c1 union (((select 2))); +#end +#begin +-- -- -- subquery in UNION +select 1 union select * from (select 2 union select 3) as table1; +select 1 union (select * from (select 2 union select 3) as table1); +#end +#begin +-- subquery FROM +select * from (((((((select col1 from t1) as ttt)))))); +select ship_power.gun_power, ship_info.* +FROM + ( + select s.name as ship_name, sum(g.power) as gun_power, max(callibr) as max_callibr + from + ships s inner join ships_guns sg on s.id = sg.ship_id inner join guns g on g.id = sg.guns_id + group by s.name + ) ship_power + inner join + ( + select s.name as ship_name, sc.class_name, sc.tonange, sc.max_length, sc.start_build, sc.max_guns_size + from + ships s inner join ship_class sc on s.class_id = sc.id + ) ship_info using (ship_name) +order by ship_power.ship_name; +#end +#begin +-- JOIN +-- -- -- join condition +select * from t1 inner join (t1 as tt1, t2 as tt2) on t1.col1 = tt1.col1; +select * from (t1 as tt1, t2 as tt2) inner join t1 on t1.col1 = tt1.col1; +select * from t1 as tt1, t2 as tt2 inner join t1 on true; +#end +#begin +-- where_condition test +select col1 from t1 inner join t2 on (t1.col1 = t2.col2); +#end +#begin +-- identifiers tests +select 1 as 123e; +#end +#begin +-- not latin1 literals +select CONVERT( LEFT( CONVERT( '自動下書き' USING binary ), 100 ) USING utf8 ) AS x_0; +select CONVERT( LEFT( CONVERT( '自動' USING binary ), 6 ) USING utf8 ) AS x_0; +select t.*, tt.* FROM wptests_terms AS t INNER JOIN wptests_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('category') AND t.name IN ('远征手记') ORDER BY t.name ASC; +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_union.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_union.sql new file mode 100644 index 0000000000..1c876f7909 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_union.sql @@ -0,0 +1,56 @@ +#begin +select 1 union select 2; +#end + +#begin +select 1 as a1, 10 as a2 union all select 2, 20 union distinct select 3, 30 union distinct select 2, 20 union all select 3, 30; + +#end + +#begin +(select 1 as a1, 10 as a2) union all (select 2, 20); +#end + +#begin +(select 1 as a1, 10 as a2) union all (select 2, 20) union distinct (select 3, 30); +#end + +#begin +select 1 as a1, 10 as a2 union all select 2, 20 union distinct (select 3, 30); +#end + +#begin +select 1 as a1, 10 as a2 union all (select 2, 20) union distinct (select 3, 30); +#end + +#begin +select 1 as a1, 10 as a2 union all (select 2, 20) union distinct select 3, 30; +#end + +#begin +select 1 as a1, 10 as a2 union all (select 2, 20) union distinct (select 3, 30) union distinct select 2, 20 union all select 3, 30; +#end + +#begin +select 1 as a1, 10 as a2 union all (select 2, 20) union distinct select 3, 30 union distinct select 2, 20 union all select 3, 30; +select 1 as a1, 10 as a2 union all (select 2, 20) union distinct select 3, 30 union distinct (select 2, 20) union all select 3, 30; +#end + +#begin +((select 1 as a1, 10 as a2)) union all (((select 2, 20))) union distinct (select 3, 30); +#end + +#begin +((select 1 as a1, 10 as a2)) union all (((select 2, 20))) union distinct (select 3, 30 into outfile 'test.dump'); +#end + +#begin +select 1 as a1, 10 as a2 union all (select 2, 20) union distinct (select 3, 30) union distinct select 2, 20 union all select 3, 30 into outfile 'test.dump'; +#end + +#begin +select 1 as a1, 10 as a2 union all (select 2, 20) union distinct select 3, 30 order by 1; +select 1 as a1, 10 as a2 union all (select 2, 20 order by 2) union distinct select 3, 30 order by 1; +select 1 as a1, 10 as a2 union all (select 2, 20 order by 2) union distinct (select 3, 30 order by 1); +select 1 as a1, 10 as a2 union all (select 2, 20 order by 2) union distinct (select 3, 30 order by 1) order by 2; +#end \ No newline at end of file diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_update.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_update.sql new file mode 100644 index 0000000000..ce667e00d0 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/dml_update.sql @@ -0,0 +1,23 @@ +#begin +-- update one-table syntax +update t set col = 100 where id = 101; +update ignore t1 set `column_name` = default, `one-more-column` = (to_seconds(now()) mod 33); +#end +#begin +-- update multiple-table syntax +update t1, t2, t3 inner join t4 using (col_name1, col_name2) +set t1.value_col = t3.new_value_col, t4.`some-col*` = `t2`.`***` * 2 +where t1.pk = t2.fk_t1_pk and t2.id = t4.fk_id_entity; +#end +#begin +-- http://dev.mysql.com/doc/refman/5.6/en/update.html +UPDATE t1 SET col1 = col1 + 1; +UPDATE t1 SET col1 = col1 + 1, col2 = col1; +UPDATE t SET id = id + 1 ORDER BY id DESC; +UPDATE items,month SET items.price=month.price WHERE items.id=month.id; +UPDATE `Table A`,`Table B` SET `Table A`.`text`=concat_ws('',`Table A`.`text`,`Table B`.`B-num`," from ",`Table B`.`date`,'/') +WHERE `Table A`.`A-num` = `Table B`.`A-num`; +UPDATE TABLE_1 LEFT JOIN TABLE_2 ON TABLE_1.COLUMN_1= TABLE_2.COLUMN_2 SET TABLE_1.`COLUMN` = EXPR WHERE TABLE_2.COLUMN2 IS NULL; +UPDATE Groups LEFT JOIN (SELECT GroupId, MIN(ValWithinGroup) AS baseVal FROM Groups GROUP BY GroupId) AS GrpSum USING (GroupId) SET ValWithinGroup=ValWithinGroup-baseVal; +update Table1 t1 join Table2 t2 on t1.ID=t2.t1ID join Table3 t3 on t2.ID=t3.t2ID set t1.Value=12345 where t3.ID=54321; +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ext_tests.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ext_tests.sql new file mode 100644 index 0000000000..ec916b1599 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/ext_tests.sql @@ -0,0 +1,35 @@ +#begin +-- Intersections +-- -- Binary: charset and datatype +select _binary 'hello' as c1; +create table t1(col1 binary(20)); +create table t2(col varchar(10) binary character set cp1251); +create table t2(col varchar(10) binary character set binary); +#end +#begin +-- -- Keywords, which can be ID. Intersect that keywords and ID +#end +#begin +-- Expression test +select +-!1 as c; +select 0 in (20 = any (select col1 from t1)) is not null is not unknown as t; +select 0 in (20 = any (select col1 from t1)) is not unknown as t; +select 20 = any (select col1 from t1) is not unknown as t; +select 20 = any (select col1 from t1) as t; +-- select sqrt(20.5) not in (sqrt(20.5) not in (select col1 from t1), 1 in (1, 2, 3, 4)) as c; +select 20 in (10 in (5 in (1, 2, 3, 4, 5), 1, 1, 8), 8, 8, 8); +select (1 in (2, 3, 4)) in (0, 1, 2) as c; +select 1 and (5 between 1 and 10) as c; + +select 1 = 16/4 between 3 and 5 as c; +select 1 = 16/4 between 5 and 6 as c; +#end +#begin +-- Functions test +select *, sqrt(a), lower(substring(str, 'a', length(str)/2)) as col3 from tab1 where a is not \N; +#end +#begin +-- Spatial data type tests +INSERT INTO geom VALUES (GeomFromWKB(0x0101000000000000000000F03F000000000000F03F)); +select y(point(1.25, 3.47)) as y, x(point(1.25, 3.47)) as x; +#end diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/mysql_spec_comment.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/mysql_spec_comment.sql new file mode 100644 index 0000000000..0cf330da92 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/mysql_spec_comment.sql @@ -0,0 +1,20 @@ +#begin +-- Mysql spec comment +select 1 /*!, ' hello' */, 2 /*! union select 5, ' world', 10 */; +select * from t /*! where col = somefunc(col2) order by sortcol */; insert into mytable /*!(col2, col3, col1) */ values (load_file('sompath'), 'str1', 2); +insert into tbl values ('a', 1, 'b'), ('c', 2, 'd'), ('e', 3, 'f') /*! on duplicate key update notsecret_col = secret_col */; +select clientname, email from users where clientname='Petrov'/*! UNION SELECT 1,load_file('/etc/passwd')*/;# +#end +#begin +-- Duplicate query with ordinal comment +select 1 /*, ' hello' */, 2 /*! union select 5, ' world', 10 */; +select * from t /* where col = somefunc(col2) order by sortcol */; insert into mytable /*(col2, col3, col1) */ values (load_file('sompath'), 'str1', 2); +insert into tbl values ('a', 1, 'b'), ('c', 2, 'd'), ('e', 3, 'f') /* on duplicate key update notsecret_col = secret_col */; +select clientname, email from users where clientname='Petrov'/* UNION SELECT 1,load_file('/etc/passwd')*/;# +#end + +#begin +-- Empty line comment +-- +-- +#end \ No newline at end of file diff --git a/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/smoke_tests.sql b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/smoke_tests.sql new file mode 100644 index 0000000000..ec916b1599 --- /dev/null +++ b/src/test/resources/bvt/parser/antlr_grammers_v4_mysql/examples/smoke_tests.sql @@ -0,0 +1,35 @@ +#begin +-- Intersections +-- -- Binary: charset and datatype +select _binary 'hello' as c1; +create table t1(col1 binary(20)); +create table t2(col varchar(10) binary character set cp1251); +create table t2(col varchar(10) binary character set binary); +#end +#begin +-- -- Keywords, which can be ID. Intersect that keywords and ID +#end +#begin +-- Expression test +select +-!1 as c; +select 0 in (20 = any (select col1 from t1)) is not null is not unknown as t; +select 0 in (20 = any (select col1 from t1)) is not unknown as t; +select 20 = any (select col1 from t1) is not unknown as t; +select 20 = any (select col1 from t1) as t; +-- select sqrt(20.5) not in (sqrt(20.5) not in (select col1 from t1), 1 in (1, 2, 3, 4)) as c; +select 20 in (10 in (5 in (1, 2, 3, 4, 5), 1, 1, 8), 8, 8, 8); +select (1 in (2, 3, 4)) in (0, 1, 2) as c; +select 1 and (5 between 1 and 10) as c; + +select 1 = 16/4 between 3 and 5 as c; +select 1 = 16/4 between 5 and 6 as c; +#end +#begin +-- Functions test +select *, sqrt(a), lower(substring(str, 'a', length(str)/2)) as col3 from tab1 where a is not \N; +#end +#begin +-- Spatial data type tests +INSERT INTO geom VALUES (GeomFromWKB(0x0101000000000000000000F03F000000000000F03F)); +select y(point(1.25, 3.47)) as y, x(point(1.25, 3.47)) as x; +#end