当前位置: 首页>>代码示例>>Java>>正文


Java DatabaseChangeLog.validate方法代码示例

本文整理汇总了Java中liquibase.changelog.DatabaseChangeLog.validate方法的典型用法代码示例。如果您正苦于以下问题:Java DatabaseChangeLog.validate方法的具体用法?Java DatabaseChangeLog.validate怎么用?Java DatabaseChangeLog.validate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在liquibase.changelog.DatabaseChangeLog的用法示例。


在下文中一共展示了DatabaseChangeLog.validate方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
	if (connection == null) {
		return;
	}

	Database database = liquiBase.getDatabase();
	ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

	ChangeLogParameters changeLogParameters = new ChangeLogParameters();

	DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
			changeLogParameters, resourceAccessor);

       liquiBase.checkLiquibaseTables(false, changeLog, new Contexts(), new LabelExpression());
	changeLog.validate(database);

	List<ChangeSet> changeSets = changeLog.getChangeSets();
	Change change = changeSets.get(0).getChanges().get(0);
	Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);

	String expected = "DROP SYNONYM new_synonym";
	assertEquals(expected, sql[0].toSql());
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:25,代码来源:DropSynonymTest.java

示例2: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
	if (connection == null) {
		return;
	}

	Database database = liquiBase.getDatabase();
	ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

	ChangeLogParameters changeLogParameters = new ChangeLogParameters();

	DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
			changeLogParameters, resourceAccessor);

       liquiBase.checkLiquibaseTables(false, changeLog, new Contexts(), new LabelExpression());
	changeLog.validate(database);

	List<ChangeSet> changeSets = changeLog.getChangeSets();
	Change change = changeSets.get(0).getChanges().get(0);
	Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);

	String expected = "CREATE SYNONYM new_synonym FOR object";
	assertEquals(expected, sql[0].toSql());
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:25,代码来源:CreateSynonymTest.java

示例3: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
	Database database = liquiBase.getDatabase();
	ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

	ChangeLogParameters changeLogParameters = new ChangeLogParameters();

	DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser( changeLogFile, resourceAccessor ).parse( changeLogFile, changeLogParameters, resourceAccessor );
	liquiBase.checkLiquibaseTables( true, changeLog, new Contexts() );
	changeLog.validate( database );

	List<ChangeSet> changeSets = changeLog.getChangeSets();

	List<String> expectedQuery = new ArrayList<String>();

	expectedQuery.add( String.format( "CREATE OR REPLACE VIEW %s.myview1 AS select 1 as One from dual", database.getLiquibaseSchemaName() ) );
	expectedQuery.add( String.format( "CREATE OR REPLACE VIEW %s.myview2 AS select * from mytable", database.getLiquibaseSchemaName() ) );
	expectedQuery.add( String.format( "CREATE OR REPLACE VIEW %s.myview2 AS select * from mytable where rownum = 1", database.getLiquibaseSchemaName() ) );
	expectedQuery.add( String.format( "CREATE OR REPLACE VIEW %s.myview4 AS select 1 as One from dual", database.getLiquibaseSchemaName() ) );
	expectedQuery.add( String.format( "CREATE OR REPLACE VIEW %s.myview3 AS select * from mytable", database.getLiquibaseSchemaName() ) );
	expectedQuery.add( String.format( "CREATE OR REPLACE VIEW %s.myview3 AS select * from mytable where one like '%%'", database.getLiquibaseSchemaName() ) );
	expectedQuery.add( String.format( "Drop materialized view myview2" ) );

	int i = 0;
	for ( ChangeSet changeSet : changeSets ) {
		for ( Change change : changeSet.getChanges() ) {
			Sql[] sql = SqlGeneratorFactory.getInstance().generateSql( change.generateStatements( database )[0], database );
			
			if ( change instanceof CreateFlexibleViewChange ) {
				for ( Sql s : sql ) {
					System.out.println( "--------------------------------------------------------------------------------------------------------" );
					System.out.println( "ACTUAL: " + s.toSql() );
					System.out.println( "EXPECT: " + expectedQuery.get( i ) );
					assertEquals( expectedQuery.get( i ), s.toSql() );
					i++;
				}
			}
		}
	}
}
 
开发者ID:mrswadge,项目名称:liquibase-flexibleview,代码行数:41,代码来源:CreateFlexibleViewTest.java

示例4: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new FileSystemResourceAccessor("src/test/java");

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();

    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance()
    		.getParser(changeLogFile, resourceAccessor)
    		.parse(changeLogFile,changeLogParameters, resourceAccessor);

    changeLog.validate(database);

    List<ChangeSet> changeSets = changeLog.getChangeSets();
    assertEquals( "number of changesets in the " + changeLogFile + " is incorrect", 3, changeSets.size() );
    ChangeSet changeSet = changeSets.get(2);

    assertEquals("Wrong number of changes found in changeset", 1, changeSet.getChanges().size());
    Change change = changeSet.getChanges().get(0);

    List<String> expectedQueries = new ArrayList<String>();
    expectedQueries.add("REVOKE UPDATE,INSERT,DELETE ON LIQUIBASE.addgrant FROM SYSTEM");

    Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
    assertEquals( "wrong number of statements generated", expectedQueries.size(), sql.length );
    assertEquals(expectedQueries.get(0), sql[0].toSql());
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:32,代码来源:RevokeObjectPermissionChangeTest.java

示例5: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);


    List<ChangeSet> changeSets = changeLog.getChangeSets();

    List<String> expectedQuery = new ArrayList<String>();

    expectedQuery.add("ALTER TRIGGER zuiolTrigger RENAME TO RenamedZuiolTrigger");

    int i = 0;

    for (ChangeSet changeSet : changeSets) {
        for (Change change : changeSet.getChanges()) {
            Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
            if (i == 4) {
                assertEquals(expectedQuery.get(0), sql[0].toSql());
            }
        }
        i++;
    }
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:37,代码来源:RenameTriggerTest.java

示例6: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);


    List<ChangeSet> changeSets = changeLog.getChangeSets();

    List<String> expectedQuery = new ArrayList<String>();

    expectedQuery.add("ALTER TABLE LBUSER.test DISABLE CONSTRAINT tom_check");

    int i = 0;

    for (ChangeSet changeSet : changeSets) {
        for (Change change : changeSet.getChanges()) {
            Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
            if (i == 2) {
                assertEquals(expectedQuery.get(0), sql[0].toSql());
            }
        }
        i++;
    }
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:37,代码来源:DisableConstraintChangeTest.java

示例7: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);


    List<ChangeSet> changeSets = changeLog.getChangeSets();
    List<String> expectedQuery = new ArrayList<String>();

    expectedQuery
            .add("CREATE TRIGGER zuiolTrigger before INSERT ON TriggerTest FOR EACH ROW DECLARE v_username varchar2(10); BEGIN SELECT pierwsza INTO v_username FROM TriggerTest; :new.created_by := v_username; END;");

    int i = 0;

    for (ChangeSet changeSet : changeSets) {
        for (Change change : changeSet.getChanges()) {
            Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
            if (i == 2) {
                assertEquals(expectedQuery.get(0), sql[0].toSql());
            }
        }
        i++;
    }
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:37,代码来源:CreateTriggerTest.java

示例8: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
	if (connection == null) {
		return;
	}

	Database database = liquiBase.getDatabase();
	ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

	ChangeLogParameters changeLogParameters = new ChangeLogParameters();

	DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile, changeLogParameters, resourceAccessor);

	changeLog.validate(database);

	List<ChangeSet> changeSets = changeLog.getChangeSets();

	List<String> expectedQuery = new ArrayList<String>();

	expectedQuery.add("CREATE TABLE LBUSER.AddDeferredPrimaryKeyTest (id NUMBER(10), name VARCHAR2(50))");
	expectedQuery.add("ALTER TABLE LBUSER.AddDeferredPrimaryKeyTest ADD CONSTRAINT PK_AddDeferredPrimaryKeyTest PRIMARY KEY (id) DEFERRABLE INITIALLY DEFERRED");

	int i = 0;

	for (ChangeSet changeSet : changeSets) {
		for (Change change : changeSet.getChanges()) {
			Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
			assertEquals(expectedQuery.get(i), sql[0].toSql());
		}
		i++;
	}
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:33,代码来源:AddDeferredPrimaryKeyChangeTest.java

示例9: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);
    List<ChangeSet> changeSets = changeLog.getChangeSets();

    List<String> expectedQuery = new ArrayList<String>();

    expectedQuery
            .add("declare commit_interval  integer; sleep_seconds integer; c integer; begin commit_interval := 5; sleep_seconds := 1; c := 1; while c > 0 loop UPDATE LongUpdateTest SET name='checked' where name='test' and rownum <= 5; c := SQL%ROWCOUNT; COMMIT; dbms_lock.sleep(1); end loop; end;");

    int i = 0;

    for (ChangeSet changeSet : changeSets) {
        for (Change change : changeSet.getChanges()) {
            Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
            if (i == 2) {
                assertEquals(expectedQuery.get(0), sql[0].toSql());
            }
        }
        i++;
    }
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:36,代码来源:LongUpdateTest.java

示例10: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);


    List<ChangeSet> changeSets = changeLog.getChangeSets();

    List<String> expectedQuery = new ArrayList<String>();

    expectedQuery.add("Drop materialized view zuiolView");

    int i = 0;

    for (ChangeSet changeSet : changeSets) {
        for (Change change : changeSet.getChanges()) {
            Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
            if (i == 5) {
                assertEquals(expectedQuery.get(0), sql[0].toSql());
            }
        }
        i++;
    }
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:37,代码来源:DropMaterializedViewTest.java

示例11: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);


    List<ChangeSet> changeSets = changeLog.getChangeSets();

    List<String> expectedQuery = new ArrayList<String>();

    expectedQuery.add("CREATE MATERIALIZED VIEW zuiolView AS select * from Table1");

    int i = 0;

    for (ChangeSet changeSet : changeSets) {
        for (Change change : changeSet.getChanges()) {
            Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
            if (i == 4) {
                assertEquals(expectedQuery.get(0), sql[0].toSql());
            }
        }
        i++;
    }
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:37,代码来源:CreateMaterializedViewTest.java

示例12: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);


    List<ChangeSet> changeSets = changeLog.getChangeSets();

    List<String> expectedQuery = new ArrayList<String>();

    expectedQuery.add("CREATE TABLE LBUSER.truncatetest (id NUMBER(10), name VARCHAR2(50))");
    expectedQuery.add("insert into truncatetest (id, name) values (1, 'dgolda')");
    expectedQuery.add("TRUNCATE TABLE LBUSER.truncatetest PURGE MATERIALIZED VIEW LOG REUSE STORAGE");
    // expectedQuery.add("TRUNCATE TABLE artur.truncatetest PURGE MATERIALIZED VIEW LOG REUSE STORAGE");

    int i = 0;

    for (ChangeSet changeSet : changeSets) {
        for (Change change : changeSet.getChanges()) {
            // Change change = changeSet.getChanges().get(0);
            Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);

            assertEquals(expectedQuery.get(i), sql[0].toSql());
        }
        i++;
    }
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:40,代码来源:TruncateChangeTest.java

示例13: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }
    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance()
    		.getParser(changeLogFile, resourceAccessor)
    		.parse(changeLogFile, new ChangeLogParameters(), resourceAccessor);

    liquiBase.checkLiquibaseTables( false, changeLog, new Contexts(), new LabelExpression());

    changeLog.validate(database);

    List<String> expectedSql = new ArrayList<String>();
    expectedSql.add("BEGIN DBMS_MVIEW.REFRESH('TABLE1_MVIEW','?',ATOMIC_REFRESH=>TRUE); END;");
    expectedSql.add("BEGIN DBMS_MVIEW.REFRESH('TABLE1_MVIEW','C',ATOMIC_REFRESH=>FALSE); END;");
    expectedSql.add("BEGIN DBMS_MVIEW.REFRESH('LIQUIBASE.TABLE1_MVIEW','?',ATOMIC_REFRESH=>FALSE); END;");

    List<ChangeSet> changeSets = changeLog.getChangeSets();
    assertEquals( "Test is out of sync with the changelog.test.xml file.  # of changesets",
    		6, changeSets.size());
    ChangeSet changeSet = changeSets.get(changeSets.size()-1);
    assertEquals( "Test is out of sync with the changelog.test.xml file.  # of changes in changeset", 3, changeSet.getChanges().size() );

    List<String> actualSql = new ArrayList<String>();

    for (Change change : changeSet.getChanges()) {
        Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
        assertEquals( "Wrong number of SQL statements generated", 1, sql.length );
        actualSql.add(sql[0].toSql());
    }

    assertEquals( "Generated SQL statements incorrect", expectedSql, actualSql );
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:38,代码来源:RefreshMaterializedViewTest.java

示例14: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);


    List<ChangeSet> changeSets = changeLog.getChangeSets();

    List<String> expectedQuery = new ArrayList<String>();

    expectedQuery.add("ALTER TABLE LBUSER.test drop CONSTRAINT tom_check");

    int i = 0;

    for (ChangeSet changeSet : changeSets) {
        for (Change change : changeSet.getChanges()) {
            Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
            if (i == 1) {
                assertEquals(expectedQuery.get(i - 1), sql[0].toSql());
            }
        }
        i++;
    }
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:37,代码来源:DropCheckChangeTest.java

示例15: parseAndGenerate

import liquibase.changelog.DatabaseChangeLog; //导入方法依赖的package包/类
@Test
public void parseAndGenerate() throws Exception {
    if (connection == null) {
        return;
    }

    Database database = liquiBase.getDatabase();
    ResourceAccessor resourceAccessor = new FileSystemResourceAccessor("src/test/java");

    ChangeLogParameters changeLogParameters = new ChangeLogParameters();


    DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
            changeLogParameters, resourceAccessor);

    changeLog.validate(database);

    List<ChangeSet> changeSets = changeLog.getChangeSets();

    List<String> expectedQuery = new ArrayList<String>();

    // expectedQuery.add("ALTER TABLE addcheck ADD CONSTRAINT tom_check CHECK(id between 0 and 5 ) DEFERRABLE INITIALLY DEFERRED DISABLE");
    // expectedQuery.add("ALTER TABLE addcheck ADD CONSTRAINT tom_check1 CHECK(id between 10 and 15) ENABLE");
    expectedQuery.add("ALTER TABLE LBUSER.addcheck ADD CHECK(id between 0 and 5 ) DEFERRABLE INITIALLY DEFERRED DISABLE");

    ChangeSet changeSet = changeSets.get(1);
    Change change = changeSet.getChanges().get(0);
    Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
    assertEquals(expectedQuery.get(0), sql[0].toSql());
}
 
开发者ID:liquibase,项目名称:liquibase-oracle,代码行数:31,代码来源:AddCheckChangeTest.java


注:本文中的liquibase.changelog.DatabaseChangeLog.validate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。