You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/03/31 00:15:18 UTC
[shardingsphere] branch master updated: Add SQLServer Create Login Statement (#16505)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 9c3d280 Add SQLServer Create Login Statement (#16505)
9c3d280 is described below
commit 9c3d280effb9e57b7d9ab930e5f9c5e08675727a
Author: Thanoshan MV <48...@users.noreply.github.com>
AuthorDate: Thu Mar 31 05:42:39 2022 +0530
Add SQLServer Create Login Statement (#16505)
---
.../main/antlr4/imports/sqlserver/DCLStatement.g4 | 70 +++++++++++++++++++++-
.../antlr4/imports/sqlserver/SQLServerKeyword.g4 | 24 ++++++++
.../impl/SQLServerDCLStatementSQLVisitor.java | 9 ++-
.../sql/common/segment/dcl/LoginSegment.java | 19 ++++--
.../dcl/SQLServerCreateLoginStatement.java | 7 +++
.../dcl/impl/CreateLoginStatementAssert.java | 13 ++++
.../impl/login/ExpectedLogin.java} | 12 ++--
.../dcl/CreateLoginStatementTestCase.java | 8 +++
.../src/main/resources/case/dcl/create-login.xml | 55 ++++++++++++++---
.../resources/sql/supported/dcl/create-login.xml | 6 +-
10 files changed, 202 insertions(+), 21 deletions(-)
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
index b1bc49d..2986e14 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
@@ -295,7 +295,7 @@ createUserWithoutLoginClause
optionsList
: DEFAULT_SCHEMA EQ_ schemaName
| DEFAULT_LANGUAGE EQ_ (NONE | identifier)
- | SID EQ_ (NCHAR_TEXT | HEX_DIGIT_)
+ | SID EQ_ sid
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS EQ_ (ON | OFF)?
;
@@ -363,7 +363,73 @@ alterRole
;
createLogin
- : CREATE LOGIN
+ : CREATE LOGIN ignoredNameIdentifier (createLoginForSQLServerClause | createLoginForAzureSQLDatabaseClause | createLoginForAzureManagedInstanceClause
+ | createLoginForAzureSynapseAnalyticsClause | createLoginForAnalyticsPlatformSystemClause)
+ ;
+
+createLoginForSQLServerClause
+ : WITH createLoginForSQLServerOptionList | FROM sources
+ ;
+
+createLoginForSQLServerOptionList
+ : PASSWORD EQ_ (stringLiterals | hashedPassword HASHED) (MUST_CHANGE)? (COMMA_ createLoginForSQLServerOptionListClause (COMMA_ createLoginForSQLServerOptionListClause)*)?
+ ;
+
+createLoginForSQLServerOptionListClause
+ : SID EQ_ sid | DEFAULT_DATABASE EQ_ databaseName | DEFAULT_LANGUAGE EQ_ identifier
+ | CHECK_EXPIRATION EQ_ (ON | OFF) | CHECK_POLICY EQ_ (ON | OFF) | CREDENTIAL EQ_ identifier
+ ;
+
+hashedPassword
+ : HEX_DIGIT_
+ ;
+
+sid
+ : NCHAR_TEXT | HEX_DIGIT_
+ ;
+
+sources
+ : WINDOWS (WITH windowsOptions (COMMA_ windowsOptions)*)? | CERTIFICATE identifier | ASYMMETRIC KEY identifier
+ ;
+
+windowsOptions
+ : DEFAULT_DATABASE EQ_ databaseName | DEFAULT_LANGUAGE EQ_ identifier
+ ;
+
+createLoginForAzureSQLDatabaseClause
+ : FROM EXTERNAL PROVIDER | WITH createLoginForAzureSQLDatabaseOptionList (COMMA_ createLoginForAzureSQLDatabaseOptionList)*
+ ;
+
+createLoginForAzureSQLDatabaseOptionList
+ : PASSWORD EQ_ stringLiterals (COMMA_ SID EQ_ sid)?
+ ;
+
+createLoginForAzureManagedInstanceClause
+ : (FROM EXTERNAL PROVIDER)? WITH azureManagedInstanceOptionList (COMMA_ azureManagedInstanceOptionList)*
+ ;
+
+azureManagedInstanceOptionList
+ : PASSWORD EQ_ stringLiterals | SID EQ_ sid | DEFAULT_DATABASE EQ_ databaseName | DEFAULT_LANGUAGE EQ_ identifier
+ ;
+
+createLoginForAzureSynapseAnalyticsClause
+ : WITH createLoginForAzureSynapseAnalyticsOptionList
+ ;
+
+createLoginForAzureSynapseAnalyticsOptionList
+ : PASSWORD EQ_ stringLiterals (COMMA_ SID EQ_ sid)?
+ ;
+
+createLoginForAnalyticsPlatformSystemClause
+ : WITH createLoginForAnalyticsPlatformSystemOptionList | FROM WINDOWS
+ ;
+
+createLoginForAnalyticsPlatformSystemOptionList
+ : PASSWORD EQ_ stringLiterals (MUST_CHANGE)? (COMMA_ createLoginForAnalyticsPlatformSystemOptionListClause (COMMA_ createLoginForAnalyticsPlatformSystemOptionListClause)*)?
+ ;
+
+createLoginForAnalyticsPlatformSystemOptionListClause
+ : CHECK_EXPIRATION EQ_ (ON | OFF) | CHECK_POLICY EQ_ (ON | OFF)
;
dropLogin
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
index ffac578..de0da15 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
@@ -1814,3 +1814,27 @@ SEND
MEMBER
: M E M B E R
;
+
+HASHED
+ : H A S H E D
+ ;
+
+MUST_CHANGE
+ : M U S T UL_ C H A N G E
+ ;
+
+DEFAULT_DATABASE
+ : D E F A U L T UL_ D A T A B A S E
+ ;
+
+CHECK_EXPIRATION
+ : C H E C K UL_ E X P I R A T I O N
+ ;
+
+CHECK_POLICY
+ : C H E C K UL_ P O L I C Y
+ ;
+
+WINDOWS
+ : W I N D O W S
+ ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDCLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDCLStatementSQLVisitor.java
index 4b83c82..2d47e3e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDCLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDCLStatementSQLVisitor.java
@@ -47,6 +47,7 @@ import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Rev
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SecurableContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SetUserContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.UserNameContext;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.LoginSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
@@ -309,7 +310,13 @@ public final class SQLServerDCLStatementSQLVisitor extends SQLServerStatementSQL
@Override
public ASTNode visitCreateLogin(final CreateLoginContext ctx) {
- return new SQLServerCreateLoginStatement();
+ SQLServerCreateLoginStatement result = new SQLServerCreateLoginStatement();
+ if (null != ctx.ignoredNameIdentifier()) {
+ LoginSegment loginSegment = new LoginSegment(ctx.ignoredNameIdentifier().getStart().getStartIndex(), ctx.ignoredNameIdentifier().getStop().getStopIndex(),
+ (IdentifierValue) visit(ctx.ignoredNameIdentifier()));
+ result.setLoginSegment(loginSegment);
+ }
+ return result;
}
@Override
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dcl/LoginSegment.java
similarity index 60%
copy from shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dcl/LoginSegment.java
index c1b42b5..4a67cb5 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dcl/LoginSegment.java
@@ -15,12 +15,23 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dcl;
+package org.apache.shardingsphere.sql.parser.sql.common.segment.dcl;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
/**
- * Create login statement test case.
+ * Login segment.
*/
-public final class CreateLoginStatementTestCase extends SQLParserTestCase {
+@RequiredArgsConstructor
+@Getter
+public final class LoginSegment implements SQLSegment {
+
+ private final int startIndex;
+
+ private final int stopIndex;
+
+ private final IdentifierValue loginName;
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerCreateLoginStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerCreateLoginStatement.java
index a432f36..5b72a15 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerCreateLoginStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerCreateLoginStatement.java
@@ -17,7 +17,10 @@
package org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl;
+import lombok.Getter;
+import lombok.Setter;
import lombok.ToString;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.LoginSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
@@ -26,5 +29,9 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLS
* SQLServer create login statement.
*/
@ToString
+@Getter
+@Setter
public final class SQLServerCreateLoginStatement extends AbstractSQLStatement implements DCLStatement, SQLServerStatement {
+
+ private LoginSegment loginSegment;
}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/CreateLoginStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/CreateLoginStatementAssert.java
index 8fdf79a..b464d4b 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/CreateLoginStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/CreateLoginStatementAssert.java
@@ -21,8 +21,14 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerCreateLoginStatement;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dcl.CreateLoginStatementTestCase;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+
/**
* Create login statement assert.
*/
@@ -37,5 +43,12 @@ public final class CreateLoginStatementAssert {
* @param expected expected create login statement test case
*/
public static void assertIs(final SQLCaseAssertContext assertContext, final SQLServerCreateLoginStatement actual, final CreateLoginStatementTestCase expected) {
+ if (null != expected.getLogin()) {
+ assertNotNull(assertContext.getText("Actual login should exist."), actual.getLoginSegment());
+ assertThat(assertContext.getText("Login name assertion error: "), actual.getLoginSegment().getLoginName().getValueWithQuoteCharacters(), is(expected.getLogin().getName()));
+ SQLSegmentAssert.assertIs(assertContext, actual.getLoginSegment(), expected.getLogin());
+ } else {
+ assertNull(assertContext.getText("Actual login should not exist."), actual.getLoginSegment());
+ }
}
}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/login/ExpectedLogin.java
similarity index 78%
copy from shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java
copy to shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/login/ExpectedLogin.java
index c1b42b5..e3fb087 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/login/ExpectedLogin.java
@@ -15,12 +15,16 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dcl;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.login;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedIdentifierSQLSegment;
/**
- * Create login statement test case.
+ * Expected login.
*/
-public final class CreateLoginStatementTestCase extends SQLParserTestCase {
+@Getter
+@Setter
+public final class ExpectedLogin extends AbstractExpectedIdentifierSQLSegment {
}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java
index c1b42b5..33735dd 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/CreateLoginStatementTestCase.java
@@ -17,10 +17,18 @@
package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dcl;
+import lombok.Getter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.login.ExpectedLogin;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
+import javax.xml.bind.annotation.XmlElement;
+
/**
* Create login statement test case.
*/
+@Getter
public final class CreateLoginStatementTestCase extends SQLParserTestCase {
+
+ @XmlElement(name = "login")
+ private ExpectedLogin login;
}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dcl/create-login.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dcl/create-login.xml
index e70cb7d..01ed338 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dcl/create-login.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dcl/create-login.xml
@@ -17,12 +17,51 @@
-->
<sql-parser-test-cases>
- <create-login sql-case-id="create_login" />
- <create-login sql-case-id="create_login_with_password"/>
- <create-login sql-case-id="create_login_with_hashed_password"/>
- <create-login sql-case-id="create_login_with_default_database"/>
- <create-login sql-case-id="create_login_with_expired_password"/>
- <create-login sql-case-id="create_login_to_credential"/>
- <create-login sql-case-id="create_login_with_certificate"/>
- <create-login sql-case-id="create_login_with_asym_key"/>
+ <create-login sql-case-id="create_login">
+ <login name="login_dev_new" start-index="13" stop-index="25"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_password">
+ <login name="login1" start-index="13" stop-index="18"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_hashed_password">
+ <login name="login1" start-index="13" stop-index="18"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_default_database">
+ <login name="login1" start-index="13" stop-index="18"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_expired_password">
+ <login name="login1" start-index="13" stop-index="18"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_to_credential">
+ <login name="login1" start-index="13" stop-index="18"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_windows">
+ <login name="[domain\login1]" start-index="13" stop-index="27"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_certificate">
+ <login name="login1" start-index="13" stop-index="18"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_asym_key">
+ <login name="login1" start-index="13" stop-index="18"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_sid">
+ <login name="login1" start-index="13" stop-index="18"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_with_multiple_arguments">
+ <login name="[login1]" start-index="13" stop-index="20"/>
+ </create-login>
+
+ <create-login sql-case-id="create_login_from_external_provider">
+ <login name="[bob@contoso.com]" start-index="13" stop-index="29"/>
+ </create-login>
</sql-parser-test-cases>
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dcl/create-login.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dcl/create-login.xml
index 0a89979..217e168 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dcl/create-login.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dcl/create-login.xml
@@ -23,8 +23,10 @@
<sql-case id="create_login_with_default_database" value="CREATE LOGIN login1 WITH PASSWORD = 'password', DEFAULT_DATABASE = database" db-types="SQLServer" />
<sql-case id="create_login_with_expired_password" value="CREATE LOGIN login1 WITH PASSWORD = 'password' MUST_CHANGE, CHECK_EXPIRATION = ON" db-types="SQLServer" />
<sql-case id="create_login_to_credential" value="CREATE LOGIN login1 WITH PASSWORD = 'password', CREDENTIAL = credential" db-types="SQLServer" />
-<!-- TODO suport create_login_with_windows on SQLServer-->
- <!--<sql-case id="create_login_with_windows" value="CREATE LOGIN [domain\login1] FROM WINDOWS" db-types="SQLServer" />-->
+ <sql-case id="create_login_with_windows" value="CREATE LOGIN [domain\login1] FROM WINDOWS" db-types="SQLServer" />
<sql-case id="create_login_with_certificate" value="CREATE LOGIN login1 FROM CERTIFICATE certificate" db-types="SQLServer" />
<sql-case id="create_login_with_asym_key" value="CREATE LOGIN login1 FROM ASYMMETRIC KEY asym_key" db-types="SQLServer" />
+ <sql-case id="create_login_with_sid" value="CREATE LOGIN login1 WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2" db-types="SQLServer" />
+ <sql-case id="create_login_with_multiple_arguments" value="CREATE LOGIN [login1] WITH PASSWORD = 'password', DEFAULT_DATABASE = database, CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF" db-types="SQLServer" />
+ <sql-case id="create_login_from_external_provider" value="CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER" db-types="SQLServer" />
</sql-cases>