未验证 提交 d5ebca7f 编写于 作者: J JingShang Lu 提交者: GitHub

Merge pull request #7125 from happybyr/master

add some new grammer & fix previous grammer in PostgreSQL
......@@ -672,7 +672,11 @@ subqueryOp
;
allOp
: mathOperator
: op | mathOperator
;
op
: (AND_ | OR_ | NOT_ | TILDE_ | VERTICAL_BAR_ | AMPERSAND_ | SIGNED_LEFT_SHIFT_ | SIGNED_RIGHT_SHIFT_ | CARET_ | MOD_ | COLON_ | PLUS_ | MINUS_ | ASTERISK_ | SLASH_ | BACKSLASH_ | DOT_ | DOT_ASTERISK_ | SAFE_EQ_ | DEQ_ | EQ_ | CQ_ | NEQ_ | GT_ | GTE_ | LT_ | LTE_ | POUND_ | LP_ | RP_ | LBE_ | RBE_ | LBT_ | RBT_ | COMMA_ | DQ_ | SQ_ | BQ_ | QUESTION_ | AT_ | SEMI_ | TILDE_TILDE_ | NOT_TILDE_TILDE_ | TYPE_CAST_ )+
;
mathOperator
......@@ -958,7 +962,7 @@ extractArg
;
genericType
: typeFunctionName typeModifiers? | typeFunctionName attrs typeModifiers?
: typeFunctionName typeModifiers? | typeFunctionName attrs typeModifiers?
;
typeModifiers
......@@ -966,7 +970,7 @@ typeModifiers
;
numeric
: INT | INTEGER | SMALLINT | BIGINT| REAL | FLOAT optFloat | DOUBLE PRECISION | DECIMAL typeModifiers? | DEC typeModifiers? | NUMERIC typeModifiers? | BOOLEAN
: INT | INTEGER | SMALLINT | BIGINT| REAL | FLOAT optFloat | DOUBLE PRECISION | DECIMAL typeModifiers? | DEC typeModifiers? | NUMERIC typeModifiers? | BOOLEAN | FLOAT8 | FLOAT4 | INT2 | INT4 | INT8
;
constDatetime
......@@ -974,6 +978,7 @@ constDatetime
| TIMESTAMP timezone?
| TIME LP_ NUMBER_ RP_ timezone?
| TIME timezone?
| DATE
;
timezone
......@@ -1016,6 +1021,9 @@ attrName
colLable
: identifier
| colNameKeyword
| typeFuncNameKeyword
| reservedKeyword
;
bit
......@@ -1311,7 +1319,7 @@ dataTypeName
: INT | INT2 | INT4 | INT8 | SMALLINT | INTEGER | BIGINT | DECIMAL | NUMERIC | REAL | FLOAT | FLOAT4 | FLOAT8 | DOUBLE PRECISION | SMALLSERIAL | SERIAL | BIGSERIAL
| MONEY | VARCHAR | CHARACTER | CHAR | TEXT | NAME | BYTEA | TIMESTAMP | DATE | TIME | INTERVAL | BOOLEAN | ENUM | POINT
| LINE | LSEG | BOX | PATH | POLYGON | CIRCLE | CIDR | INET | MACADDR | MACADDR8 | BIT | VARBIT | TSVECTOR | TSQUERY | UUID | XML
| JSON | INT4RANGE | INT8RANGE | NUMRANGE | TSRANGE | TSTZRANGE | DATERANGE | ARRAY | identifier
| JSON | INT4RANGE | INT8RANGE | NUMRANGE | TSRANGE | TSTZRANGE | DATERANGE | ARRAY | identifier | constDatetime | typeName
;
dataTypeLength
......@@ -1548,7 +1556,7 @@ defList
;
defElem
: colLabel defArg?
: (colLabel EQ_ defArg) | colLabel
;
colLabel
......@@ -1751,3 +1759,15 @@ functionSetResetClause
| variableResetStmt
;
rowSecurityCmd
: ALL | SELECT | INSERT | UPDATE | DELETE
;
event
: SELECT | UPDATE | DELETE | INSERT
;
typeNameList
: typeName (COMMA_ typeName)*
;
......@@ -130,3 +130,12 @@ load
: LOAD fileName
;
valuesClause
: VALUES LP_ exprList RP_
| valuesClause COMMA_ LP_ exprList RP_
;
vacuum
: VACUUM ((FULL? FREEZE? VERBOSE? ANALYZE?) | (LP_ vacAnalyzeOptionList RP_)) vacuumRelationList?
;
......@@ -17,22 +17,22 @@
grammar DCLStatement;
import Symbol, Keyword, PostgreSQLKeyword, Literals, BaseRule;
import Symbol, Keyword, PostgreSQLKeyword, Literals, BaseRule, DDLStatement;
grant
: GRANT (privilegeClause | roleClause_)
;
revoke
: REVOKE optionForClause_? (privilegeClause | roleClause_)
: REVOKE optionForClause_? (privilegeClause | roleClause_) (CASCADE | RESTRICT)?
;
privilegeClause
: privileges_ ON onObjectClause
: privileges_ ON onObjectClause (FROM | TO) granteeList (WITH GRANT OPTION)?
;
roleClause_
: ignoredIdentifiers_
: privilegeList (FROM | TO) roleList (WITH ADMIN OPTION)? (GRANTED BY roleSpec)?
;
optionForClause_
......@@ -61,20 +61,37 @@ privilegeType_
;
onObjectClause
: DATABASE
| SCHEMA
| DOMAIN
| FOREIGN
| FUNCTION
| PROCEDURE
| ROUTINE
| ALL
| LANGUAGE
| LARGE OBJECT
| TABLESPACE
| TYPE
| SEQUENCE
| TABLE? tableNames
: DATABASE nameList
| SCHEMA nameList
| DOMAIN anyNameList
| FUNCTION functionWithArgtypesList
| PROCEDURE functionWithArgtypesList
| ROUTINE functionWithArgtypesList
| LANGUAGE nameList
| LARGE OBJECT numericOnlyList
| TABLESPACE nameList
| TYPE anyNameList
| SEQUENCE qualifiedNameList
| TABLE? privilegeLevel
| FOREIGN DATA WRAPPER nameList
| FOREIGN SERVER nameList
| ALL TABLES IN SCHEMA nameList
| ALL SEQUENCES IN SCHEMA nameList
| ALL FUNCTIONS IN SCHEMA nameList
| ALL PROCEDURES IN SCHEMA nameList
| ALL ROUTINES IN SCHEMA nameList
;
privilegeLevel
: ASTERISK_ | ASTERISK_ DOT_ASTERISK_ | identifier DOT_ASTERISK_ | tableNames | schemaName DOT_ routineName
;
routineName
: identifier
;
numericOnlyList
: numericOnly (COMMA_ numericOnly)*
;
createUser
......@@ -137,3 +154,36 @@ alterSchema
: ALTER SCHEMA name (RENAME TO name | OWNER TO roleSpec)
;
createGroup
: CREATE GROUP roleSpec WITH? createOptRoleElem*
;
createSchema
: CREATE SCHEMA (IF NOT EXISTS)? createSchemaClauses
;
createSchemaClauses
: colId? AUTHORIZATION roleSpec schemaEltList
| colId schemaEltList
;
schemaEltList
: schemaStmt*
;
schemaStmt
: createTable | createIndex | createSequence | createTrigger | grant | createView
;
dropDroup
: DROP GROUP (IF EXISTS)? roleList
;
dropSchema
: DROP SCHEMA (IF EXISTS)? nameList dropBehavior?
;
reassignOwned
: REASSIGN OWNED BY roleList TO roleSpec
;
......@@ -21,9 +21,7 @@ import Symbol, Keyword, PostgreSQLKeyword, Literals, BaseRule,DMLStatement;
createTable
: CREATE createTableSpecification_ TABLE tableNotExistClause_ tableName
createDefinitionClause
(OF anyName (LP_ typedTableElementList RP_)?)?
(PARTITION OF qualifiedName (LP_ typedTableElementList RP_)? partitionBoundSpec)?
(createDefinitionClause | (OF anyName (LP_ typedTableElementList RP_)?) | (PARTITION OF qualifiedName (LP_ typedTableElementList RP_)? partitionBoundSpec))
inheritClause_ partitionSpec? tableAccessMethodClause? withOption? onCommitOption? tableSpace?
(AS select withData?)?
(EXECUTE name executeParamClause withData?)?
......@@ -86,7 +84,7 @@ tableAccessMethodClause
;
accessMethod
: colId
: identifier | unreservedWord | colNameKeyword
;
createIndex
......@@ -111,7 +109,7 @@ createDatabase
;
createView
: CREATE (OR REPLACE)? (TEMP | TEMPORARY)? RECURSIVE? VIEW name
: CREATE (OR REPLACE)? (TEMP | TEMPORARY)? RECURSIVE? VIEW qualifiedName
(LP_ (columnList (COMMA_ columnList)*)? RP_)?
(WITH reloptions)?
AS select
......@@ -147,11 +145,11 @@ createdbOptName
alterTable
: ALTER TABLE
( tableExistClause_ onlyClause_ tableNameClause alterDefinitionClause
| ALL IN TABLESPACE name (OWNED BY roleList)? SET TABLESPACE name NOWAIT?)
| ALL IN TABLESPACE tableNameClause (OWNED BY roleList)? SET TABLESPACE name NOWAIT?)
;
alterIndex
: ALTER INDEX indexExistClause_ indexName alterIndexDefinitionClause_
: ALTER INDEX (indexExistClause_ | ALL IN TABLESPACE) indexName alterIndexDefinitionClause_
;
dropTable
......@@ -246,7 +244,7 @@ sequenceOption
indexParameters
: (USING INDEX TABLESPACE ignoredIdentifier_)?
| INCLUDE columnNames
| WITH
| WITH definition
;
action
......@@ -269,10 +267,23 @@ tableConstraintOption
: checkOption
| UNIQUE columnNames indexParameters
| primaryKey columnNames indexParameters
| EXCLUDE (USING ignoredIdentifier_)?
| EXCLUDE (USING ignoredIdentifier_)? LP_ exclusionConstraintList RP_ indexParameters exclusionWhereClause?
| FOREIGN KEY columnNames REFERENCES tableName columnNames? (MATCH FULL | MATCH PARTIAL | MATCH SIMPLE)? (ON (DELETE | UPDATE) action)*
;
exclusionWhereClause
: WHERE LP_ aExpr RP_
;
exclusionConstraintList
: exclusionConstraintElem (COMMA_ exclusionConstraintElem)*
;
exclusionConstraintElem
: indexElem WITH anyOperator
| indexElem WITH OPERATOR LP_ anyOperator RP_
;
inheritClause_
: (INHERITS tableNames)?
;
......@@ -288,6 +299,11 @@ partParams
partElem
: colId (COLLATE anyName)? anyName?
| LP_ aExpr RP_ (COLLATE anyName)? anyName?
| funcExprWindowless (COLLATE anyName)? anyName?
;
funcExprWindowless
: funcApplication | functionExprCommonSubexpr
;
partStrategy
......@@ -350,7 +366,7 @@ alterIndexDependsOnExtension
;
alterIndexSetTableSpace
: ALL IN TABLESPACE indexName (OWNED BY ignoredIdentifiers_)? SET TABLESPACE name (NOWAIT)?
: (OWNED BY ignoredIdentifiers_)? SET TABLESPACE name (NOWAIT)?
;
tableNamesClause
......@@ -404,7 +420,7 @@ dropColumnSpecification
columnExistClause_
: (IF EXISTS)?
;
modifyColumnSpecification
: modifyColumn (SET DATA)? TYPE dataType collateClause_? (USING aExpr)?
| modifyColumn SET DEFAULT aExpr
......@@ -617,6 +633,39 @@ alterOperator
: ALTER OPERATOR alterOperatorClauses
;
alterOperatorClass
: ALTER OPERATOR CLASS anyName USING name alterOperatorClassClauses
;
alterOperatorClassClauses
: RENAME TO name | SET SCHEMA name | OWNER TO roleSpec
;
alterOperatorFamily
: ALTER OPERATOR FAMILY anyName USING name alterOperatorFamilyClauses
;
alterOperatorFamilyClauses
: (ADD | DROP) opclassItemList
| alterOperatorClassClauses
;
opclassItemList
: opclassItem (COMMA_ opclassItem)*
;
opclassItem
: OPERATOR NUMBER_ anyOperator opclassPurpose? RECHECK?
| OPERATOR NUMBER_ operatorWithArgtypes opclassPurpose? RECHECK?
| FUNCTION NUMBER_ functionWithArgtypes
| FUNCTION NUMBER_ LP_ typeList RP_ functionWithArgtypes
| STORAGE typeName
;
opclassPurpose
: FOR SEARCH | FOR ORDER BY anyName
;
alterOperatorClauses
: operatorWithArgtypes SET SCHEMA name
| operatorWithArgtypes SET LP_ operatorDefList RP_
......@@ -763,7 +812,7 @@ alterDomain
alterDomainClause
: anyName (SET | DROP) NOT NULL
| anyName ADD tableConstraint
| anyName DROP CONSTRAINT (IF EXISTS) name dropBehavior?
| anyName DROP CONSTRAINT (IF EXISTS)? name dropBehavior?
| anyName VALIDATE CONSTRAINT name
| anyName RENAME CONSTRAINT constraintName TO constraintName
| anyName OWNER TO roleSpec
......@@ -992,7 +1041,7 @@ alterPublication
;
alterRoutine
: ALTER ROUTINE alterProcedureClauses
: ALTER ROUTINE functionWithArgtypes alterProcedureClauses
;
alterRule
......@@ -1048,7 +1097,7 @@ publicationNameItem
;
alterSystem
: ALTER SYSTEM SET | RESET genericSet
: ALTER SYSTEM (SET genericSet | RESET genericReset)
;
alterTablespace
......@@ -1057,6 +1106,7 @@ alterTablespace
| RENAME TO name
| OWNER TO roleSpec)
;
alterTextSearchConfiguration
: ALTER TEXT SEARCH CONFIGURATION anyName alterTextSearchConfigurationClauses
;
......@@ -1066,7 +1116,7 @@ alterTextSearchConfigurationClauses
| SET SCHEMA name
| OWNER TO roleSpec
| (ADD | ALTER) MAPPING FOR nameList WITH? anyNameList
| ALTER MAPPING (FOR nameList) REPLACE anyName WITH anyName
| ALTER MAPPING (FOR nameList)? REPLACE anyName WITH anyName
| DROP MAPPING (IF EXISTS)? FOR nameList
;
......@@ -1144,7 +1194,7 @@ close
;
cluster
: CLUSTER VERBOSE (qualifiedName clusterIndexSpecification? | name ON qualifiedName)?
: CLUSTER VERBOSE? (qualifiedName clusterIndexSpecification? | name ON qualifiedName)?
;
clusterIndexSpecification
......@@ -1294,7 +1344,46 @@ createExtensionOptItem
;
createForeignDataWrapper
: CREATE FOREIGN DATA WRAPPER name fdwOptions? createGenericOptions
: CREATE FOREIGN DATA WRAPPER name fdwOptions? createGenericOptions?
;
createForeignTable
: CREATE FOREIGN TABLE createForeignTableClauses
;
createForeignTableClauses
: (IF NOT EXISTS)? qualifiedName LP_ tableElementList? RP_
(INHERITS LP_ qualifiedNameList RP_)? SERVER name createGenericOptions?
| (IF NOT EXISTS)? qualifiedName PARTITION OF qualifiedName (LP_ typedTableElementList RP_)? partitionBoundSpec
SERVER name createGenericOptions?
;
tableElementList
: tableElement (COMMA_ tableElement)*
;
tableElement
: columnDef | tableLikeClause | tableConstraint
;
tableLikeClause
: LIKE qualifiedName tableLikeOptionList
;
tableLikeOptionList
: tableLikeOptionList (INCLUDING | EXCLUDING) tableLikeOption |
;
tableLikeOption
: COMMENTS
| CONSTRAINTS
| DEFAULTS
| IDENTITY
| GENERATED
| INDEXES
| STATISTICS
| STORAGE
| ALL
;
createFunction
......@@ -1329,7 +1418,7 @@ transformTypeList
;
funcAs
: STRING_ (COMMA_ STRING_)?
: identifier | STRING_ (COMMA_ identifier|STRING_)?
;
funcReturn
......@@ -1350,3 +1439,425 @@ funcArgWithDefault
| funcArg EQ_ aExpr
;
createLanguage
: CREATE (OR REPLACE)? TRUSTED? PROCEDURAL? LANGUAGE name
( HANDLER handlerName (INLINE handlerName)? validatorClause?
| LP_ transformElementList RP_)?
;
transformElementList
: FROM SQL WITH FUNCTION functionWithArgtypes COMMA_ (TO | FROM) SQL WITH FUNCTION functionWithArgtypes
| (TO | FROM) SQL WITH FUNCTION functionWithArgtypes
;
validatorClause
: VALIDATOR handlerName | NO VALIDATOR
;
createPolicy
: CREATE POLICY name ON qualifiedName (AS identifier)?
(FOR rowSecurityCmd)? (TO roleList)?
(USING LP_ aExpr RP_)? (WITH CHECK LP_ aExpr RP_)?
;
createProcedure
: CREATE (OR REPLACE)? PROCEDURE funcName funcArgsWithDefaults createfuncOptList
;
createPublication
: CREATE PUBLICATION name publicationForTables? (WITH definition)?
;
publicationForTables
: FOR TABLE relationExprList | FOR ALL TABLES
;
createRule
: CREATE (OR REPLACE)? RULE name AS ON event TO qualifiedName (WHERE aExpr)?
DO (INSTEAD | ALSO)? ruleActionList
;
ruleActionList
: NOTHING
| ruleActionStmt
| LP_ ruleActionMulti RP_
;
ruleActionStmt
: select
| insert
| update
| delete
| notifyStmt
;
ruleActionMulti
: ruleActionStmt? (SEMI_ ruleActionStmt?)*
;
notifyStmt
: NOTIFY colId (COMMA_ STRING_)?
;
createTrigger
: CREATE TRIGGER name triggerActionTime triggerEvents ON qualifiedName triggerReferencing? triggerForSpec? triggerWhen? EXECUTE (FUNCTION | PROCEDURE) funcName LP_ triggerFuncArgs? RP_
| CREATE CONSTRAINT TRIGGER (FROM qualifiedName)? constraintAttributeSpec FOR EACH ROW triggerWhen EXECUTE (FUNCTION | PROCEDURE) funcName LP_ triggerFuncArgs RP_
;
triggerEvents
: triggerOneEvent (OR triggerOneEvent)*
;
triggerOneEvent
: INSERT
| DELETE
| UPDATE
| UPDATE OF columnList
| TRUNCATE
;
triggerActionTime
: BEFORE | AFTER | INSTEAD OF
;
triggerFuncArgs
: triggerFuncArg (COMMA_ triggerFuncArg)*
;
triggerFuncArg
: NUMBER_ | STRING_ | colLabel
;
triggerWhen
: WHEN LP_ aExpr RP_
;
triggerForSpec
: FOR EACH? (ROW | STATEMENT)
;
triggerReferencing
: REFERENCING triggerTransitions
;
triggerTransitions
: triggerTransition+
;
triggerTransition
: transitionOldOrNew transitionRowOrTable AS? transitionRelName
;
transitionRelName
: colId
;
transitionRowOrTable
: TABLE | ROW
;
transitionOldOrNew
: OLD | NEW
;
createSequence
: CREATE tempOption? SEQUENCE (IF NOT EXISTS)? qualifiedName seqOptList?
;
tempOption
: ((LOCAL | GLOBAL)? (TEMPORARY | TEMP)) | UNLOGGED
;
createServer
: CREATE SERVER (IF NOT EXISTS)? name (TYPE STRING_)? foreignServerVersion? FOREIGN DATA WRAPPER name createGenericOptions
;
createStatistics
: CREATE STATISTICS (IF NOT EXISTS)? anyName optNameList ON exprList FROM fromList
;
createSubscription
: CREATE SUBSCRIPTION name CONNECTION STRING_ PUBLICATION publicationNameList (WITH definition)?
;
createTablespace
: CREATE TABLESPACE name (OWNER roleSpec)? LOCATION STRING_ (WITH reloptions)?
;
createTextSearch
: CREATE TEXT SEARCH (CONFIGURATION | DICTIONARY | PARSER | TEMPLATE) anyName definition
;
createTransform
: CREATE (OR REPLACE)? TRANSFORM FOR typeName LANGUAGE name LP_ transformElementList RP_
;
createType
: CREATE TYPE anyName createTypeClauses
;
createTypeClauses
: definition?
| AS LP_ tableFuncElementList? RP_
| AS ENUM LP_ enumValList? RP_
| AS RANGE definition
;
enumValList
: STRING_ (COMMA_ STRING_)*
;
createUserMapping
: CREATE USER MAPPING (IF NOT EXISTS)? FOR authIdent SERVER name createGenericOptions
;
discard
: DISCARD (ALL | PLANS | SEQUENCES | TEMPORARY | TEMP)
;
dropAccessMethod
: DROP ACCESS METHOD (IF EXISTS)? name dropBehavior?
;
dropAggregate
: DROP AGGREGATE (IF EXISTS)? aggregateWithArgtypesList dropBehavior?
;
aggregateWithArgtypesList
: aggregateWithArgtypes (COMMA_ aggregateWithArgtypes)*
;
dropCast
: DROP CAST (IF EXISTS)? LP_ typeName AS typeName RP_ dropBehavior?
;
dropCollation
: DROP COLLATION (IF EXISTS)? name dropBehavior?
;
dropConversion
: DROP CONVERSION (IF EXISTS)? name dropBehavior?
;
dropDomain
: DROP DOMAIN (IF EXISTS)? nameList dropBehavior?
;
dropEventTrigger
: DROP EVENT TRIGGER (IF EXISTS)? name dropBehavior?
;
dropExtension
: DROP EXTENSION (IF EXISTS)? nameList dropBehavior?
;
dropForeignDataWrapper
: DROP FOREIGN DATA WRAPPER (IF EXISTS)? nameList dropBehavior?
;
dropForeignTable
: DROP FOREIGN TABLE (IF EXISTS)? tableName (COMMA_ tableName)* dropBehavior?
;
dropFunction
: DROP FUNCTION (IF EXISTS)? functionWithArgtypesList dropBehavior?
;
functionWithArgtypesList
: functionWithArgtypes (COMMA_ functionWithArgtypes)*
;
dropLanguage
: DROP PROCEDURAL? LANGUAGE (IF EXISTS)? name dropBehavior?
;
dropMaterializedView
: DROP MATERIALIZED VIEW (IF EXISTS)? anyNameList dropBehavior?
;
dropOperator
: DROP OPERATOR (IF EXISTS)? operatorWithArgtypesList dropBehavior?
;
operatorWithArgtypesList
: operatorWithArgtypes (COMMA_ operatorWithArgtypes)*
;
dropOperatorClass
: DROP OPERATOR CLASS (IF EXISTS)? anyName USING name dropBehavior?
;
dropOperatorFamily
: DROP OPERATOR FAMILY (IF EXISTS)? anyName USING name dropBehavior?
;
dropOwned
: DROP OWNED BY roleList dropBehavior?
;
dropPolicy
: DROP POLICY (IF EXISTS)? name ON tableName dropBehavior?
;
dropProcedure
: DROP PROCEDURE (IF EXISTS)? functionWithArgtypesList dropBehavior?
;
dropPublication
: DROP PUBLICATION (IF EXISTS)? anyNameList dropBehavior?
;
dropRoutine
: DROP ROUTINE (IF EXISTS)? functionWithArgtypesList dropBehavior?
;
dropRule
: DROP RULE (IF EXISTS)? name ON tableName dropBehavior?
;
dropSequence
: DROP SEQUENCE (IF EXISTS)? qualifiedNameList dropBehavior?
;
dropServer
: DROP SERVER (IF EXISTS)? qualifiedNameList dropBehavior?
;
dropStatistics
: DROP STATISTICS (IF EXISTS)? qualifiedNameList
;
dropSubscription
: DROP SUBSCRIPTION (IF EXISTS)? qualifiedName dropBehavior?
;
dropTablespace
: DROP TABLESPACE (IF EXISTS)? qualifiedName
;
dropTextSearch
: DROP TEXT SEARCH (CONFIGURATION | DICTIONARY | PARSER | TEMPLATE) (IF EXISTS)? name dropBehavior?
;
dropTransform
: DROP TRANSFORM (IF EXISTS)? FOR typeName LANGUAGE name dropBehavior?
;
dropTrigger
: DROP TRIGGER (IF EXISTS)? qualifiedName ON tableName dropBehavior?
;
dropType
: DROP TYPE (IF EXISTS)? anyNameList dropBehavior?
;
dropUserMapping
: DROP USER MAPPING (IF EXISTS)? FOR authIdent SERVER name
;
dropView
: DROP VIEW (IF EXISTS)? nameList dropBehavior?
;
importForeignSchema
: IMPORT FOREIGN SCHEMA name importQualification? FROM SERVER name INTO name createGenericOptions?
;
importQualification
: importQualificationType LP_ relationExprList RP_
;
importQualificationType
: LIMIT TO | EXCEPT
;
listen
: LISTEN colId
;
move
: MOVE fetchArgs
;
prepare
: PREPARE name prepTypeClause? AS preparableStmt
;
prepTypeClause
: LP_ typeList RP_
;
refreshMaterializedView
: REFRESH MATERIALIZED VIEW CONCURRENTLY? qualifiedName withData?
;
reIndex
: REINDEX reIndexClauses
;
reIndexClauses
: reindexTargetType CONCURRENTLY? qualifiedName
| reindexTargetMultitable CONCURRENTLY? name
| LP_ reindexOptionList RP_ reindexTargetType CONCURRENTLY? qualifiedName
| LP_ reindexOptionList RP_ reindexTargetMultitable CONCURRENTLY? name
;
reindexOptionList
: reindexOptionElem (COMMA_ reindexOptionElem)*
;
reindexOptionElem
: VERBOSE
;
reindexTargetMultitable
: SCHEMA | SYSTEM | DATABASE
;
reindexTargetType
: INDEX | TABLE
;
alterForeignTable
: ALTER FOREIGN TABLE (IF EXISTS)? relationExpr alterForeignTableClauses
;
alterForeignTableClauses
: RENAME TO name
| RENAME COLUMN? name TO name
| alterTableCmds
| SET SCHEMA name
;
createOperator
: CREATE OPERATOR anyOperator definition
;
createOperatorClass
: CREATE OPERATOR CLASS anyName DEFAULT? FOR TYPE typeName USING name (FAMILY anyName)? AS opclassItemList
;
createOperatorFamily
: CREATE OPERATOR FAMILY anyName USING name
;
securityLabelStmt
: SECURITY LABEL (FOR nonReservedWordOrSconst) ON securityLabelClausces IS securityLabel
;
securityLabel
: STRING_ | NULL
;
securityLabelClausces
: objectTypeAnyName anyName
| COLUMN anyName
| (TYPE | DOMAIN) typeName
| (AGGREGATE | FUNCTION) aggregateWithArgtypes
| LARGE OBJECT numericOnly
| (PROCEDURE | ROUTINE) functionWithArgtypes
;
unlisten
: UNLISTEN (colId | ASTERISK_)
;
......@@ -475,3 +475,87 @@ checkpoint
: CHECKPOINT
;
copy
: COPY (BINARY)? qualifiedName (LP_ columnList RP_)? (FROM | TO) PROGRAM?
(STRING_ | STDIN | STDOUT) copyDelimiter? (WITH)? copyOptions whereClause?
| COPY LP_ preparableStmt RP_ TO PROGRAM? (STRING_ | STDIN | STDOUT) WITH? copyOptions
;
copyOptions
: copyOptList | LP_ copyGenericOptList RP_
;
copyGenericOptList
: copyGenericOptElem (COMMA_ copyGenericOptElem)*
;
copyGenericOptElem
: colLabel copyGenericOptArg
;
copyGenericOptArg
: booleanOrString
| numericOnly
| ASTERISK_
| LP_ copyGenericOptArgList RP_
;
copyGenericOptArgList
: copyGenericOptArgListItem (COMMA_ copyGenericOptArgListItem)*
;
copyGenericOptArgListItem
: booleanOrString
;
copyOptList
: copyOptItem*
;
copyOptItem
: BINARY
| FREEZE
| DELIMITER (AS)? STRING_
| NULL (AS)? STRING_
| CSV
| HEADER
| QUOTE (AS)? STRING_
| ESCAPE (AS)? STRING_
| FORCE QUOTE columnList
| FORCE QUOTE ASTERISK_
| FORCE NOT NULL columnList
| FORCE NULL columnList
| ENCODING STRING_
;
copyDelimiter
: (USING)? DELIMITERS STRING_
;
deallocate
: DEALLOCATE PREPARE? (name | ALL)
;
fetch
: FETCH fetchArgs
;
fetchArgs
: cursorName
| (FROM | IN) cursorName
| NEXT (FROM | IN)? cursorName
| PRIOR (FROM | IN)? cursorName
| FIRST (FROM | IN)? cursorName
| LAST (FROM | IN)? cursorName
| ABSOLUTE signedIconst (FROM | IN)? cursorName
| RELATIVE signedIconst (FROM | IN)? cursorName
| signedIconst (FROM | IN)? cursorName
| ALL (FROM | IN)? cursorName
| FORWARD (FROM | IN)? cursorName
| FORWARD signedIconst (FROM | IN)? cursorName
| FORWARD ALL (FROM | IN)? cursorName
| BACKWARD (FROM | IN)? cursorName
| BACKWARD signedIconst (FROM | IN)? cursorName
| BACKWARD ALL (FROM | IN)? cursorName
;
......@@ -41,7 +41,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RevokeState
import org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
/**
* DCL visitor for PostgreSQL.
......@@ -51,28 +51,27 @@ public final class PostgreSQLDCLVisitor extends PostgreSQLVisitor implements DCL
@Override
public ASTNode visitGrant(final GrantContext ctx) {
GrantStatement result = new GrantStatement();
if (null != ctx.privilegeClause()) {
for (SimpleTableSegment each : getTableFromPrivilegeClause(ctx.privilegeClause())) {
result.getTables().add(each);
}
}
Optional<Collection<SimpleTableSegment>> tableSegmentOptional = null == ctx.privilegeClause() ? Optional.empty() : getTableFromPrivilegeClause(ctx.privilegeClause());
tableSegmentOptional.ifPresent(tableSegment -> result.getTables().addAll(tableSegment));
return result;
}
@Override
public ASTNode visitRevoke(final RevokeContext ctx) {
RevokeStatement result = new RevokeStatement();
if (null != ctx.privilegeClause()) {
for (SimpleTableSegment each : getTableFromPrivilegeClause(ctx.privilegeClause())) {
result.getTables().add(each);
}
}
Optional<Collection<SimpleTableSegment>> tableSegmentOptional = null == ctx.privilegeClause() ? Optional.empty() : getTableFromPrivilegeClause(ctx.privilegeClause());
tableSegmentOptional.ifPresent(tableSegment -> result.getTables().addAll(tableSegment));
return result;
}
@SuppressWarnings("unchecked")
private Collection<SimpleTableSegment> getTableFromPrivilegeClause(final PrivilegeClauseContext ctx) {
return null == ctx.onObjectClause().tableNames() ? Collections.emptyList() : ((CollectionValue<SimpleTableSegment>) visit(ctx.onObjectClause().tableNames())).getValue();
private Optional<Collection<SimpleTableSegment>> getTableFromPrivilegeClause(final PrivilegeClauseContext ctx) {
if (null != ctx.onObjectClause() && null != ctx.onObjectClause().privilegeLevel()) {
if (null != ctx.onObjectClause().privilegeLevel().tableNames()) {
return Optional.of(((CollectionValue<SimpleTableSegment>) visit(ctx.onObjectClause().privilegeLevel().tableNames())).getValue());
}
}
return Optional.empty();
}
@Override
......
......@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser.postgresql.visitor.impl;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import org.apache.shardingsphere.sql.parser.api.visitor.statement.DDLVisitor;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CreateDatabaseContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CreateFunctionContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.AlterProcedureContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.AlterFunctionContext;
......@@ -32,10 +33,16 @@ import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.Co
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CreateDefinitionClauseContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CreateDefinitionContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CreateIndexContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CreateProcedureContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CreateTableContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CreateViewContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.DropColumnSpecificationContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.DropDatabaseContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.DropFunctionContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.DropIndexContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.DropProcedureContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.DropTableContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.DropViewContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.IndexNameContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.IndexNamesContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.ModifyColumnSpecificationContext;
......@@ -61,13 +68,21 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterFuncti
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterProcedureStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateDatabaseStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateFunctionStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndexStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateProcedureStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateViewStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropFunctionStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropIndexStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropProcedureStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropViewStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.TruncateStatement;
import org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Collection;
import java.util.Collections;
......@@ -301,4 +316,39 @@ public final class PostgreSQLDDLVisitor extends PostgreSQLVisitor implements DDL
public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
return new CreateFunctionStatement();
}
@Override
public ASTNode visitCreateProcedure(final CreateProcedureContext ctx) {
return new CreateProcedureStatement();
}
@Override
public ASTNode visitDropFunction(final DropFunctionContext ctx) {
return new DropFunctionStatement();
}
@Override
public ASTNode visitDropView(final DropViewContext ctx) {
return new DropViewStatement();
}
@Override
public ASTNode visitCreateView(final CreateViewContext ctx) {
return new CreateViewStatement();
}
@Override
public ASTNode visitDropDatabase(final DropDatabaseContext ctx) {
return new DropDatabaseStatement(((IdentifierValue) visit(ctx.name())).getValue());
}
@Override
public ASTNode visitDropProcedure(final DropProcedureContext ctx) {
return new DropProcedureStatement();
}
@Override
public ASTNode visitCreateDatabase(final CreateDatabaseContext ctx) {
return new CreateDatabaseStatement(((IdentifierValue) visit(ctx.name())).getValue());
}
}
......@@ -215,6 +215,6 @@
<grant sql-case-id="grant_all_on_table_with_owner_for_postgresql">
<!-- FIXME ds_0 is not table, should be schema -->
<table name="ds_0" start-index="24" stop-index="27" />
<!--<table name="ds_0" start-index="24" stop-index="27" />-->
</grant>
</sql-parser-test-cases>
......@@ -31,4 +31,5 @@
</alter-index>
<alter-index sql-case-id="alter_index_alter_column" />
<alter-index sql-case-id="alter_index_set_tablespace" />
</sql-parser-test-cases>
......@@ -832,4 +832,12 @@
<alter-table sql-case-id="alter_table_attach_partition">
<table name="t_order" stop-index="18" start-index="12"/>
</alter-table>
<alter-table sql-case-id="alter_table_detach_partition">
<table name="t_order" stop-index="18" start-index="12"/>
</alter-table>
<alter-table sql-case-id="alter_table_in_hash_partitioned_table">
<table name="t_order" stop-index="18" start-index="12"/>
</alter-table>
</sql-parser-test-cases>
......@@ -77,4 +77,20 @@
<create-index sql-case-id="create_index_with_no_default_fill_factor">
<table name="t_order" start-index="35" stop-index="41" />
</create-index>
<create-index sql-case-id="create_index_with_tablespace">
<table name="t_order" start-index="25" stop-index="31" />
</create-index>
<create-index sql-case-id="create_index_using_gist">
<table name="t_order" start-index="25" stop-index="31" />
</create-index>
<create-index sql-case-id="create_index_with_concurrently">
<table name="t_order" start-index="50" stop-index="56" />
</create-index>
<create-index sql-case-id="create_gin_index">
<table name="t_order" start-index="24" stop-index="30" />
</create-index>
</sql-parser-test-cases>
......@@ -1336,6 +1336,52 @@
</column-definition>
</create-table>
<create-table sql-case-id="create_table_with_range_partitioned_and_values">
<table name="t_order" start-index="13" stop-index="19" />
</create-table>
<create-table sql-case-id="create_table_partition_by_hash">
<table name="t_order" start-index="13" stop-index="19" />
<column-definition type="bigint" start-index="22" stop-index="45">
<column name="order_id" />
</column-definition>
<column-definition type="bigint" start-index="47" stop-index="69">
<column name="cust_id" />
</column-definition>
<column-definition type="text" start-index="71" stop-index="81">
<column name="status" />
</column-definition>
</create-table>
<create-table sql-case-id="create_table_partition_by_list">
<table name="t_order" start-index="13" stop-index="19" />
<column-definition type="bigserial" start-index="22" stop-index="47">
<column name="city_id" />
</column-definition>
<column-definition type="text" start-index="49" stop-index="66">
<column name="name" />
</column-definition>
<column-definition type="bigint" start-index="68" stop-index="84">
<column name="population" />
</column-definition>
</create-table>
<create-table sql-case-id="create_table_of_type">
<table name="t_order" start-index="13" stop-index="19" />
</create-table>
<create-table sql-case-id="create_table_in_tablespace">
<table name="t_order" start-index="13" stop-index="19" />
<column-definition type="serial" start-index="22" stop-index="30">
<column name="id" />
</column-definition>
<column-definition type="text" start-index="32" stop-index="40">
<column name="name" />
</column-definition>
<column-definition type="text" start-index="42" stop-index="54">
<column name="location" />
</column-definition>
</create-table>
<create-table sql-case-id="create_table_with_sign_column">
<table name="t_order" start-index="13" stop-index="19" />
<column-definition type="INT" primary-key="true" start-index="21" stop-index="38">
......
......@@ -90,11 +90,11 @@
<sql-case id="grant_all_on_language_to_current_user" value="GRANT ALL PRIVILEGES ON LANGUAGE lang1 TO CURRENT_USER" db-types="PostgreSQL" />
<sql-case id="grant_usage_on_language" value="GRANT USAGE ON LANGUAGE lang1 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_usage_on_languages" value="GRANT USAGE ON LANGUAGE lang1, lang2 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_all_on_large_object" value="GRANT ALL PRIVILEGES ON LARGE OBJECT loid1 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_all_on_large_object_to_roles" value="GRANT ALL PRIVILEGES ON LARGE OBJECT loid1 TO role1, role2" db-types="PostgreSQL" />
<sql-case id="grant_all_on_large_object_to_current_user" value="GRANT ALL PRIVILEGES ON LARGE OBJECT loid1 TO CURRENT_USER" db-types="PostgreSQL" />
<sql-case id="grant_select_large_object" value="GRANT SELECT ON LARGE OBJECT loid1 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_select_on_large_objects" value="GRANT SELECT ON LARGE OBJECT loid1, loid2 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_all_on_large_object" value="GRANT ALL PRIVILEGES ON LARGE OBJECT 3344 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_all_on_large_object_to_roles" value="GRANT ALL PRIVILEGES ON LARGE OBJECT 3344 TO role1, role2" db-types="PostgreSQL" />
<sql-case id="grant_all_on_large_object_to_current_user" value="GRANT ALL PRIVILEGES ON LARGE OBJECT 3344 TO CURRENT_USER" db-types="PostgreSQL" />
<sql-case id="grant_select_large_object" value="GRANT SELECT ON LARGE OBJECT 3344 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_select_on_large_objects" value="GRANT SELECT ON LARGE OBJECT 3344, 3345 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_all_on_schema" value="GRANT ALL PRIVILEGES ON SCHEMA schema1 TO role1" db-types="PostgreSQL" />
<sql-case id="grant_all_on_schema_to_roles" value="GRANT ALL PRIVILEGES ON SCHEMA schema1 TO role1, role2" db-types="PostgreSQL" />
<sql-case id="grant_all_on_schema_to_current_user" value="GRANT ALL PRIVILEGES ON SCHEMA schema1 TO CURRENT_USER" db-types="PostgreSQL" />
......
......@@ -81,11 +81,11 @@
<sql-case id="revoke_all_on_language_from_roles" value="REVOKE ALL PRIVILEGES ON LANGUAGE lang1 FROM role1, role2" db-types="PostgreSQL" />
<sql-case id="revoke_usage_on_language" value="REVOKE USAGE ON LANGUAGE lang1 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_usage_on_languages" value="REVOKE USAGE ON LANGUAGE lang1, lang2 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_all_on_large_object" value="REVOKE ALL PRIVILEGES ON LARGE OBJECT loid1 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_all_on_large_object_from_roles" value="REVOKE ALL PRIVILEGES ON LARGE OBJECT loid1 FROM role1, role2" db-types="PostgreSQL" />
<sql-case id="revoke_select_large_object" value="REVOKE SELECT ON LARGE OBJECT loid1 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_all_on_large_object" value="REVOKE ALL PRIVILEGES ON LARGE OBJECT 100 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_all_on_large_object_from_roles" value="REVOKE ALL PRIVILEGES ON LARGE OBJECT 100 FROM role1, role2" db-types="PostgreSQL" />
<sql-case id="revoke_select_large_object" value="REVOKE SELECT ON LARGE OBJECT 100 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_all_on_schema_from_role" value="REVOKE ALL PRIVILEGES ON SCHEMA schema1 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_select_on_large_objects" value="REVOKE SELECT ON LARGE OBJECT loid1, loid2 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_select_on_large_objects" value="REVOKE SELECT ON LARGE OBJECT 100, 101 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_all_on_schema_from_roles" value="REVOKE ALL PRIVILEGES ON SCHEMA schema1 FROM role1, role2" db-types="PostgreSQL" />
<sql-case id="revoke_create_on_schema" value="REVOKE CREATE ON SCHEMA schema1 FROM role1" db-types="PostgreSQL" />
<sql-case id="revoke_create_on_schemas" value="REVOKE CREATE ON SCHEMA schema1, schema2 FROM role1" db-types="PostgreSQL" />
......
......@@ -54,7 +54,7 @@
<sql-case id="alter_table_add_composite_primary_key" value="ALTER TABLE t_order ADD status int,ADD CONSTRAINT pk_order_id_user_id_status PRIMARY KEY (order_id, user_id, status)" db-types="MySQL,PostgreSQL" />
<!-- TODO support PostgreSQL-->
<sql-case id="alter_table_add_unique_key" value="ALTER TABLE t_order ADD CONSTRAINT uk_order_id UNIQUE (order_id)" db-types="MySQL,Oracle,SQLServer"/>
<sql-case id="alter_table_add_foreign_key" value="ALTER TABLE t_order_item ADD CONSTRAINT fk_order_id FOREIGN KEY (order_id) REFERENCES t_order (order_id) ON DELETE CASCADE" db-types="MySQL,Oracle,SQLServer" />
<sql-case id="alter_table_add_foreign_key" value="ALTER TABLE t_order_item ADD CONSTRAINT fk_order_id FOREIGN KEY (order_id) REFERENCES t_order (order_id) ON DELETE CASCADE" db-types="MySQL,Oracle,SQLServer,PostgreSQL" />
<!-- TODO support PostgreSQL-->
<sql-case id="alter_table_add_constraints" value="ALTER TABLE t_order_item ADD PRIMARY KEY (order_id),ADD UNIQUE (order_id), ADD FOREIGN KEY (order_id) REFERENCES t_order (order_id) ON UPDATE CASCADE ON DELETE CASCADE" db-types="MySQL" />
<sql-case id="alter_table_drop_primary_key" value="ALTER TABLE t_order DROP PRIMARY KEY" db-types="MySQL,Oracle" />
......@@ -106,5 +106,8 @@
<sql-case id="alter_table_alter_column_for_sqlserver" value="ALTER TABLE t_order ALTER COLUMN column4 VARCHAR(20)" db-types="SQLServer" />
<sql-case id="alter_table_set_schema" value="ALTER TABLE t_order SET SCHEMA yourschema" db-types="PostgreSQL" />
<sql-case id="alter_table_attach_partition" value="ALTER TABLE t_order ATTACH PARTITION measurement_y2016m07 FOR VALUES FROM ('2016-07-01') TO ('2016-08-01')" db-types="PostgreSQL"/>
<sql-case id="alter_table_detach_partition" value="ALTER TABLE t_order ATTACH PARTITION measurement_y2016m07 FOR VALUES FROM ('2016-07-01') TO ('2016-08-01')" db-types="PostgreSQL"/>
<sql-case id="alter_table_in_hash_partitioned_table" value="ALTER TABLE t_order ATTACH PARTITION orders_p4 FOR VALUES WITH (MODULUS 4, REMAINDER 3)" db-types="PostgreSQL" />
<sql-case id="alter_index_set_tablespace" value="ALTER INDEX distributors SET TABLESPACE fasttablespace" db-types="PostgreSQL" />
<sql-case id="alter_index_alter_column" value="ALTER INDEX t_order_idx ALTER COLUMN 3 SET STATISTICS 1000" db-types="PostgreSQL"/>
</sql-cases>
......@@ -113,6 +113,15 @@
<sql-case id="create_table_with_index" value="CREATE TABLE t_order (order_id INT INDEX order_index, user_id INT, status VARCHAR(10), column1 VARCHAR(10), column2 VARCHAR(10), column3 VARCHAR(10))" db-types="SQLServer" />
<sql-case id="create_index_with_bracket" value="CREATE INDEX [order_index] ON [t_order] ([order_id])" db-types="SQLServer" />
<sql-case id="create_index_with_no_default_fill_factor" value="CREATE UNIQUE INDEX order_index ON t_order (order_id) WITH (fillfactor = 70)" db-types="PostgreSQL"/>
<sql-case id="create_index_with_tablespace" value="CREATE INDEX code_idx ON t_order (code) TABLESPACE indexspace" db-types="PostgreSQL"/>
<sql-case id="create_index_using_gist" value="CREATE INDEX pointloc ON t_order USING gist (func1(location,location))" db-types="PostgreSQL" />
<sql-case id="create_index_with_concurrently" value="CREATE INDEX CONCURRENTLY sales_quantity_index ON t_order(quantity)" db-types="PostgreSQL" />
<sql-case id="create_gin_index" value="CREATE INDEX gin_idx ON t_order USING GIN (locations) WITH (fastupdate = off)" db-types="PostgreSQL" />
<sql-case id="create_table_with_range_partitioned_and_values" value="CREATE TABLE t_order PARTITION OF cities (CONSTRAINT city_id_nonzero CHECK (city_id != 0)) FOR VALUES IN ('a', 'b') PARTITION BY RANGE (population)" db-types="PostgreSQL" />
<sql-case id="create_table_partition_by_hash" value="CREATE TABLE t_order (order_id bigint not null,cust_id bigint not null,status text) PARTITION BY HASH (order_id)" db-types="PostgreSQL" />
<sql-case id="create_table_partition_by_list" value="CREATE TABLE t_order (city_id bigserial not null,name text not null,population bigint) PARTITION BY LIST (left(lower(name), 1))" db-types="PostgreSQL" />
<sql-case id="create_table_of_type" value="CREATE TABLE t_order OF employee_type (PRIMARY KEY (name),salary WITH OPTIONS DEFAULT 1000)" db-types="PostgreSQL" />
<sql-case id="create_table_in_tablespace" value="CREATE TABLE t_order (id serial,name text,location text) TABLESPACE diskvol1" db-types="PostgreSQL" />
<sql-case id="create_table_with_sign_column" value="CREATE TABLE t_order(id INT PRIMARY KEY, order_id BIGINT(20) SIGNED)" db-types="MySQL" />
<sql-case id="create_table_with_unsigned_column" value="CREATE TABLE t_order(id INT PRIMARY KEY, order_id BIGINT(20) UNSIGNED)" db-types="MySQL" />
</sql-cases>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册