- 浏览: 24862 次
- 性别:
- 来自: 泰安
文章分类
最新评论
pom 依赖
build
db.properties
changelog.xml
dbchangelog-3.0.xsd
changeset.xml
<dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>3.0.8</version> </dependency>
build
<build> <finalName>v-crm</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <junitArtifactName>junit:junit-dep</junitArtifactName> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>2.3.7</version> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.2</version> <configuration> <format>{0,date,yyyy-MM-dd HH:mm:ss}</format> <items> <item>timestamp</item> </items> </configuration> <executions> <execution> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <useCache>false</useCache> <archive> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> </manifest> <manifestEntries> <Implementation-Environment>${env}</Implementation-Environment> <Implementation-Build>${buildNumber}</Implementation-Build> </manifestEntries> </archive> <dependentWarExcludes>WEB-INF/web.xml,WEB-INF/lib/*,WEB-INF/classes/*.xml</dependentWarExcludes> <overlays> <overlay><!-- 空groupId/artifactId代表当前构建 --> </overlay> <overlay> <groupId>com.lashou.v</groupId> <artifactId>v-overlay</artifactId> <includes> <include>css/</include> <include>img/</include> <include>WEB-INF/view/</include> </includes> </overlay> </overlays> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>war</goal> </goals> <configuration> <classifier>${env}</classifier> </configuration> </execution> </executions> </plugin> <!-- liquibase --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0-alpha-2</version> <configuration> <files> <file>${basedir}/conf/default/db.properties</file> </files> </configuration> <executions> <execution> <id>set-properties</id> <phase>initialize</phase> <goals> <goal>read-project-properties</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>3.0.8</version> <configuration> <changeLogFile>${basedir}/src/main/resources/db/liquibase/changelog.xml</changeLogFile> <defaultSchemaName>public</defaultSchemaName> <logging>debug</logging> <outputFileEncoding>utf-8</outputFileEncoding> <driver>${db.crm_cms.driverClassName}</driver> <url>jdbc:postgresql://${db.crm_cms.ip}:${db.crm_cms.port}/crm_cms</url> <username>${db.liquibase.username}</username> <password>${db.liquibase.password}</password> </configuration> </plugin> </plugins> </build>
db.properties
#liquibase db.liquibase.ip=localhost db.liquibase.port=3306 db.liquibase.username=postgres db.liquibase.password=postgres
changelog.xml
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog-3.0.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> <preConditions> <dbms type="postgresql" /> </preConditions> <changeSet id="init_1" author="reed"> <comment>grant permissions for liquibase system's tables</comment> <sql> GRANT SELECT, UPDATE, INSERT ON TABLE databasechangelog TO group_cms; GRANT SELECT, UPDATE, INSERT ON TABLE databasechangelog TO group_crm; GRANT SELECT, UPDATE, INSERT ON TABLE databasechangeloglock TO group_cms; GRANT SELECT, UPDATE, INSERT ON TABLE databasechangeloglock TO group_crm; </sql> </changeSet> <changeSet id="init_0" author="reed"> <tagDatabase tag="init" /> </changeSet> <!-- include by different versions --> <!-- <include file="classpath:db/liquibase/v/v2.22.xml"/> --> <!-- <include file="v/v2.22.xml" relativeToChangelogFile="true"/> --> <!-- TMD!!!!!!!!!!!!!there is bug for dbchangelog-3.0.xsd--> <!-- So using local xsd:dbchangelog-3.0.xsd then can set resourceFilter for XMLChangeLogSAXHandler--> <includeAll path="db/liquibase/v"/> <!-- <includeAll path="v" relativeToChangelogFile="true"/> --> </databaseChangeLog>
dbchangelog-3.0.xsd
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.liquibase.org/xml/ns/dbchangelog" xmlns="http://www.liquibase.org/xml/ns/dbchangelog" elementFormDefault="qualified"> <xsd:simpleType name="propertyExpression" id="propertyExpression"> <xsd:restriction base="xsd:string"> <xsd:pattern value="$\{[\w\.]+\}"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="booleanExp" id="booleanExp"> <xsd:annotation> <xsd:appinfo> <xsd:documentation>Extension to standard XSD boolean type to allow ${} parameters</xsd:documentation> </xsd:appinfo> </xsd:annotation> <xsd:union> <xsd:simpleType> <xsd:restriction base="xsd:boolean"/> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base="propertyExpression"/> </xsd:simpleType> </xsd:union> </xsd:simpleType> <xsd:simpleType name="integerExp" id="integerExp"> <xsd:annotation> <xsd:appinfo> <xsd:documentation>Extension to standard XSD integer type to allow ${} parameters</xsd:documentation> </xsd:appinfo> </xsd:annotation> <xsd:union> <xsd:simpleType> <xsd:restriction base="xsd:integer"/> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base="propertyExpression"/> </xsd:simpleType> </xsd:union> </xsd:simpleType> <xsd:simpleType name="onChangeSetPreconditionErrorOrFail"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="HALT" /> <xsd:enumeration value="WARN" /> <xsd:enumeration value="CONTINUE" /> <xsd:enumeration value="MARK_RAN" /> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="onChangeLogPreconditionErrorOrFail"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="HALT" /> <xsd:enumeration value="WARN" /> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="onChangeLogPreconditionOnSqlOutput"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="TEST" /> <xsd:enumeration value="FAIL" /> <xsd:enumeration value="IGNORE" /> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="onChangeSetValidationFail"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="HALT" /> <xsd:enumeration value="MARK_RAN" /> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="objectQuotingStrategy"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="LEGACY" /> <xsd:enumeration value="QUOTE_ALL_OBJECTS" /> <xsd:enumeration value="QUOTE_ONLY_RESERVED_WORDS" /> </xsd:restriction> </xsd:simpleType> <!-- This is the main (root) part of the xsd --> <xsd:element name="databaseChangeLog"> <xsd:complexType> <xsd:sequence> <xsd:element name="property" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="file" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="value" type="xsd:string" /> <xsd:attribute name="dbms" type="xsd:string" /> <xsd:attribute name="context" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="preConditions" minOccurs="0" maxOccurs="1"> <xsd:complexType> <xsd:choice> <xsd:group ref="PreConditionChildren" maxOccurs="unbounded" /> </xsd:choice> <xsd:attribute name="onFailMessage" type="xsd:string" /> <xsd:attribute name="onErrorMessage" type="xsd:string" /> <xsd:attribute name="onFail" type="onChangeLogPreconditionErrorOrFail" /> <xsd:attribute name="onError" type="onChangeLogPreconditionErrorOrFail" /> <xsd:attribute name="onSqlOutput" type="onChangeLogPreconditionOnSqlOutput" /> </xsd:complexType> </xsd:element> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="changeSet" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="validCheckSum" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element ref="comment" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="preConditions" minOccurs="0" maxOccurs="1"> <xsd:annotation> <xsd:appinfo> <xsd:documentation>onChangeLogPreconditionOnSqlOutput determines what should happen when evaluating this precondition in updateSQL mode. TEST: Run precondition, FAIL: Fail precondition, IGNORE: Skip precondition check [DEFAULT]</xsd:documentation> </xsd:appinfo> </xsd:annotation> <xsd:complexType> <xsd:choice> <xsd:group ref="PreConditionChildren" maxOccurs="unbounded" /> </xsd:choice> <xsd:attribute name="onFailMessage" type="xsd:string" /> <xsd:attribute name="onErrorMessage" type="xsd:string" /> <xsd:attribute name="onFail" type="onChangeSetPreconditionErrorOrFail" /> <xsd:attribute name="onError" type="onChangeSetPreconditionErrorOrFail" /> <xsd:attribute name="onSqlOutput" type="onChangeLogPreconditionOnSqlOutput" /> </xsd:complexType> </xsd:element> <xsd:choice> <xsd:element ref="tagDatabase" maxOccurs="1" /> <xsd:group ref="changeSetChildren" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> <xsd:element name="modifySql" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:choice> <xsd:group ref="modifySqlChildren" minOccurs="1" maxOccurs="unbounded" /> </xsd:choice> <xsd:attribute name="dbms" type="xsd:string" /> <xsd:attribute name="context" type="xsd:string" /> <xsd:attribute name="applyToRollback" type="booleanExp" /> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attributeGroup ref="changeSetAttributes" /> <xsd:anyAttribute namespace="##other" /> </xsd:complexType> </xsd:element> <!-- include --> <xsd:element name="include" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="file" type="xsd:string" use="required" /> <xsd:attribute name="relativeToChangelogFile" type="booleanExp" /> <xsd:anyAttribute namespace="##other" /> </xsd:complexType> </xsd:element> <xsd:element name="includeAll" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="path" type="xsd:string" use="required" /> <xsd:attribute name="relativeToChangelogFile" type="booleanExp" /> <xsd:attribute name="resourceFilter" type="xsd:string" /> <xsd:anyAttribute namespace="##other" /> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:sequence> <xsd:attributeGroup ref="changeLogAttributes" /> <xsd:anyAttribute namespace="##other" /> </xsd:complexType> </xsd:element> <xsd:group name="modifySqlChildren"> <xsd:choice> <xsd:element name="replace" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="replace" type="xsd:string" use="required" /> <xsd:attribute name="with" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="regExpReplace" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="replace" type="xsd:string" use="required" /> <xsd:attribute name="with" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="prepend" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="value" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="append" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="value" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:group> <!-- Attributes for DatabaseInfo --> <xsd:attributeGroup name="DatabaseInfoAttributes"> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="version" type="xsd:string" /> <xsd:attribute name="username" type="xsd:string" /> <xsd:attribute name="password" type="xsd:string" /> <xsd:attribute name="port" type="integerExp" /> <xsd:attribute name="host" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="driverName" type="xsd:string" /> </xsd:attributeGroup> <!-- Attributes for changeSet --> <xsd:attributeGroup name="changeLogAttributes"> <xsd:attribute name="logicalFilePath" type="xsd:string" /> <xsd:attribute name="objectQuotingStrategy" type="objectQuotingStrategy" default="LEGACY" /> </xsd:attributeGroup> <!-- Attributes for changeSet --> <xsd:attributeGroup name="changeSetAttributes"> <xsd:attribute name="id" type="xsd:string" use="required" /> <xsd:attribute name="author" type="xsd:string" use="required" /> <xsd:attribute name="context" type="xsd:string" /> <xsd:attribute name="dbms" type="xsd:string" /> <xsd:attribute name="runOnChange" type="booleanExp" /> <xsd:attribute name="runAlways" type="booleanExp" /> <xsd:attribute name="failOnError" type="booleanExp" /> <xsd:attribute name="onValidationFail" type="onChangeSetValidationFail" /> <xsd:attribute name="runInTransaction" type="booleanExp" default="true" /> <xsd:attribute name="logicalFilePath" type="xsd:string" /> <xsd:attribute name="objectQuotingStrategy" type="objectQuotingStrategy" /> </xsd:attributeGroup> <!-- Attributes for constraints --> <xsd:attributeGroup name="constraintsAttributes"> <xsd:attribute name="nullable" type="booleanExp" /> <xsd:attribute name="primaryKey" type="booleanExp" /> <xsd:attribute name="primaryKeyName" type="xsd:string" /> <xsd:attribute name="primaryKeyTablespace" type="xsd:string" /> <xsd:attribute name="unique" type="booleanExp" /> <xsd:attribute name="uniqueConstraintName" type="xsd:string" /> <xsd:attribute name="references" type="xsd:string" /> <xsd:attribute name="referencedTableName" type="xsd:string"/> <xsd:attribute name="referencedColumnNames" type="xsd:string"/> <xsd:attribute name="foreignKeyName" type="xsd:string" /> <xsd:attribute name="deleteCascade" type="booleanExp" /> <xsd:attribute name="deferrable" type="booleanExp" /> <xsd:attribute name="initiallyDeferred" type="booleanExp" /> <xsd:attribute name="checkConstraint" type="xsd:string" /> </xsd:attributeGroup> <xsd:attributeGroup name="column"> <xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="value" type="xsd:string" /> <xsd:attribute name="valueNumeric" type="xsd:string" /> <xsd:attribute name="valueBoolean" type="xsd:string" /> <xsd:attribute name="valueDate" type="xsd:string" /> <xsd:attribute name="valueComputed" type="xsd:string" /> <xsd:attribute name="valueSequenceCurrent" type="xsd:string" /> <xsd:attribute name="valueSequenceNext" type="xsd:string" /> <xsd:attribute name="valueBlobFile" type="xsd:string"/> <xsd:attribute name="valueClobFile" type="xsd:string"/> <xsd:attribute name="defaultValue" type="xsd:string" /> <xsd:attribute name="defaultValueNumeric" type="xsd:string" /> <xsd:attribute name="defaultValueDate" type="xsd:string" /> <xsd:attribute name="defaultValueBoolean" type="booleanExp" /> <xsd:attribute name="defaultValueComputed" type="xsd:string" /> <xsd:attribute name="defaultValueSequenceCurrent" type="xsd:string" /> <xsd:attribute name="defaultValueSequenceNext" type="xsd:string" /> <xsd:attribute name="autoIncrement" type="booleanExp" /> <xsd:attribute name="startWith" type="xsd:long" /> <xsd:attribute name="incrementBy" type="xsd:long" /> <xsd:attribute name="remarks" type="xsd:string" /> </xsd:attributeGroup> <xsd:attributeGroup name="param"> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="value" type="xsd:string" /> <xsd:attribute name="valueNumeric" type="xsd:string" /> <xsd:attribute name="valueBoolean" type="xsd:string" /> <xsd:attribute name="valueDate" type="xsd:string" /> <xsd:attribute name="valueComputed" type="xsd:string" /> <xsd:attribute name="valueSequenceNext" type="xsd:string" /> <xsd:attribute name="valueSequenceCurrent" type="xsd:string" /> </xsd:attributeGroup> <xsd:attributeGroup name="tableNameAttribute"> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="tableName" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:attributeGroup name="dropTableAttributes"> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="cascadeConstraints" type="booleanExp" /> </xsd:attributeGroup> <xsd:attributeGroup name="renameTableAttributes"> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="oldTableName" type="xsd:string" use="required" /> <xsd:attribute name="newTableName" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:attributeGroup name="renameViewAttributes"> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="oldViewName" type="xsd:string" use="required" /> <xsd:attribute name="newViewName" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:attributeGroup name="renameColumnAttributes"> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="oldColumnName" type="xsd:string" use="required" /> <xsd:attribute name="newColumnName" type="xsd:string" use="required" /> <xsd:attribute name="columnDataType" type="xsd:string" /> </xsd:attributeGroup> <xsd:attributeGroup name="dropColumnAttributes"> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="columnName" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:attributeGroup name="sequenceAttributes"> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="sequenceName" type="xsd:string" use="required" /> <xsd:attribute name="startValue" type="xsd:string" /> <xsd:attribute name="incrementBy" type="xsd:string" /> <xsd:attribute name="maxValue" type="xsd:string" /> <xsd:attribute name="minValue" type="xsd:string" /> <xsd:attribute name="ordered" type="booleanExp" /> </xsd:attributeGroup> <xsd:attributeGroup name="indexName"> <xsd:attribute name="indexName" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:attributeGroup name="createIndex"> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attributeGroup ref="indexName" /> <xsd:attribute name="associatedWith" type="xsd:string" use="optional" /> <xsd:attribute name="unique" type="booleanExp" /> <xsd:attribute name="tablespace" type="xsd:string" /> </xsd:attributeGroup> <xsd:element name="addPrimaryKey"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="columnNames" type="xsd:string" use="required" /> <xsd:attribute name="constraintName" type="xsd:string" /> <xsd:attribute name="tablespace" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="dropPrimaryKey"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="constraintName" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="addUniqueConstraint"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="columnNames" type="xsd:string" use="required" /> <xsd:attribute name="constraintName" type="xsd:string" /> <xsd:attribute name="tablespace" type="xsd:string" /> <xsd:attribute name="disabled" type="booleanExp" /> <xsd:attribute name="deferrable" type="booleanExp" /> <xsd:attribute name="initiallyDeferred" type="booleanExp" /> </xsd:complexType> </xsd:element> <xsd:element name="dropUniqueConstraint"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="constraintName" type="xsd:string" /> <xsd:attribute name="uniqueColumns" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="modifyDataType"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="columnName" type="xsd:string" use="required" /> <xsd:attribute name="newDataType" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="addLookupTable"> <xsd:complexType> <xsd:attribute name="existingTableCatalogName" type="xsd:string" /> <xsd:attribute name="existingTableSchemaName" type="xsd:string" /> <xsd:attribute name="existingTableName" type="xsd:string" use="required" /> <xsd:attribute name="existingColumnName" type="xsd:string" use="required" /> <xsd:attribute name="newTableCatalogName" type="xsd:string" /> <xsd:attribute name="newTableSchemaName" type="xsd:string" /> <xsd:attribute name="newTableName" type="xsd:string" use="required" /> <xsd:attribute name="newColumnName" type="xsd:string" use="required" /> <xsd:attribute name="newColumnDataType" type="xsd:string" /> <xsd:attribute name="constraintName" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="addAutoIncrement"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="columnName" type="xsd:string" use="required" /> <xsd:attribute name="columnDataType" type="xsd:string" /> <xsd:attribute name="startWith" type="xsd:long" /> <xsd:attribute name="incrementBy" type="xsd:long" /> </xsd:complexType> </xsd:element> <xsd:element name="addDefaultValue"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="columnName" type="xsd:string" use="required" /> <xsd:attribute name="columnDataType" type="xsd:string" /> <xsd:attribute name="defaultValue" type="xsd:string" /> <xsd:attribute name="defaultValueNumeric" type="xsd:string" /> <xsd:attribute name="defaultValueDate" type="xsd:string" /> <xsd:attribute name="defaultValueBoolean" type="xsd:string" /> <xsd:attribute name="defaultValueComputed" type="xsd:string" /> <xsd:attribute name="defaultValueSequenceNext" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="dropDefaultValue"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="columnName" type="xsd:string" use="required" /> <xsd:attribute name="columnDataType" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="loadData"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element name="column" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="index" type="integerExp" /> <xsd:attribute name="header" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="defaultValue" type="xsd:string" /> <xsd:attribute name="defaultValueNumeric" type="xsd:string" /> <xsd:attribute name="defaultValueDate" type="xsd:string" /> <xsd:attribute name="defaultValueBoolean" type="booleanExp" /> <xsd:attribute name="defaultValueComputed" type="xsd:string" /> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="file" type="xsd:string" /> <xsd:attribute name="encoding" type="xsd:string" default="UTF-8"/> <xsd:attribute name="separator" type="xsd:string" default=","/> <xsd:attribute name="quotchar" type="xsd:string" default="""/> </xsd:complexType> </xsd:element> <xsd:element name="loadUpdateData"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element name="column" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="index" type="integerExp" /> <xsd:attribute name="header" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="defaultValue" type="xsd:string" /> <xsd:attribute name="defaultValueNumeric" type="xsd:string" /> <xsd:attribute name="defaultValueDate" type="xsd:string" /> <xsd:attribute name="defaultValueBoolean" type="booleanExp" /> <xsd:attribute name="defaultValueComputed" type="xsd:string" /> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="file" type="xsd:string" /> <xsd:attribute name="encoding" type="xsd:string" default="UTF-8"/> <xsd:attribute name="primaryKey" type="xsd:string" use="required" /> <xsd:attribute name="separator" type="xsd:string" default=","/> <xsd:attribute name="quotchar" type="xsd:string" default="""/> </xsd:complexType> </xsd:element> <xsd:simpleType name="fkCascadeActionOptions"> <xsd:restriction base="xsd:token"> <xsd:enumeration value="CASCADE"></xsd:enumeration> <xsd:enumeration value="SET NULL"></xsd:enumeration> <xsd:enumeration value="SET DEFAULT"></xsd:enumeration> <xsd:enumeration value="RESTRICT"></xsd:enumeration> <xsd:enumeration value="NO ACTION"></xsd:enumeration> </xsd:restriction> </xsd:simpleType> <xsd:attributeGroup name="addForeignKeyConstraintAttrib"> <xsd:attribute name="baseTableCatalogName" type="xsd:string" /> <xsd:attribute name="baseTableSchemaName" type="xsd:string" /> <xsd:attribute name="baseTableName" type="xsd:string" use="required" /> <xsd:attribute name="baseColumnNames" type="xsd:string" use="required" /> <xsd:attribute name="constraintName" type="xsd:string" use="required" /> <xsd:attribute name="referencedTableCatalogName" type="xsd:string" /> <xsd:attribute name="referencedTableSchemaName" type="xsd:string" /> <xsd:attribute name="referencedTableName" type="xsd:string" use="required" /> <xsd:attribute name="referencedColumnNames" type="xsd:string" use="required" /> <xsd:attribute name="deferrable" type="booleanExp" /> <xsd:attribute name="initiallyDeferred" type="booleanExp" /> <xsd:attribute name="deleteCascade" type="booleanExp" /> <xsd:attribute name="onDelete" type="fkCascadeActionOptions" /> <xsd:attribute name="onUpdate" type="fkCascadeActionOptions" /> <xsd:attribute name="referencesUniqueColumn" type="booleanExp" /> </xsd:attributeGroup> <xsd:attributeGroup name="addNotNullConstraintAttrib"> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="columnName" type="xsd:string" use="required" /> <xsd:attribute name="defaultNullValue" type="xsd:string" /> <xsd:attribute name="columnDataType" type="xsd:string" /> </xsd:attributeGroup> <xsd:element name="addNotNullConstraint"> <xsd:complexType> <xsd:attributeGroup ref="addNotNullConstraintAttrib" /> </xsd:complexType> </xsd:element> <xsd:element name="addForeignKeyConstraint"> <xsd:complexType> <xsd:attributeGroup ref="addForeignKeyConstraintAttrib" /> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="dbmsAttrib"> <xsd:attribute name="type" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:element name="dbms"> <xsd:complexType> <xsd:attributeGroup ref="dbmsAttrib" /> </xsd:complexType> </xsd:element> <xsd:element name="changeSetExecuted"> <xsd:complexType> <xsd:attribute name="id" type="xsd:string" use="required" /> <xsd:attribute name="author" type="xsd:string" use="required" /> <xsd:attribute name="changeLogFile" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="tableExists"> <xsd:complexType> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="tableName" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="columnExists"> <xsd:complexType> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="tableName" type="xsd:string" use="required" /> <xsd:attribute name="columnName" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="sequenceExists"> <xsd:complexType> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="sequenceName" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="foreignKeyConstraintExists"> <xsd:complexType> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="foreignKeyTableName" type="xsd:string" /> <xsd:attribute name="foreignKeyName" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="indexExists"> <xsd:complexType> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="indexName" type="xsd:string"/> <xsd:attribute name="tableName" type="xsd:string" /> <xsd:attribute name="columnNames" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="changeLogPropertyDefined"> <xsd:complexType> <xsd:attribute name="property" type="xsd:string" use="required" /> <xsd:attribute name="value" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="primaryKeyExists"> <xsd:complexType> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="primaryKeyName" type="xsd:string" /> <xsd:attribute name="tableName" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="viewExists"> <xsd:complexType> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="viewName" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="sqlCheck"> <xsd:complexType mixed="true"> <xsd:attribute name="expectedResult" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="customPrecondition"> <xsd:complexType> <xsd:sequence> <xsd:element name="param" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="value" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="className" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="and"> <xsd:complexType> <xsd:choice> <xsd:group ref="PreConditionChildren" minOccurs="1" maxOccurs="unbounded" /> </xsd:choice> </xsd:complexType> </xsd:element> <xsd:element name="or"> <xsd:complexType> <xsd:choice> <xsd:group ref="PreConditionChildren" minOccurs="1" maxOccurs="unbounded" /> </xsd:choice> </xsd:complexType> </xsd:element> <xsd:element name="not"> <xsd:complexType> <xsd:choice> <xsd:group ref="PreConditionChildren" minOccurs="1" maxOccurs="unbounded" /> </xsd:choice> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="runningAsAttrib"> <xsd:attribute name="username" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:element name="runningAs"> <xsd:complexType> <xsd:attributeGroup ref="runningAsAttrib" /> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="objectQuotingStrategyAttrib"> <xsd:attribute name="strategy" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:element name="expectedQuotingStrategy"> <xsd:complexType> <xsd:attributeGroup ref="objectQuotingStrategyAttrib" /> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="dropForeignKeyConstraintAttrib"> <xsd:attribute name="baseTableCatalogName" type="xsd:string" /> <xsd:attribute name="baseTableSchemaName" type="xsd:string" /> <xsd:attribute name="baseTableName" type="xsd:string" use="required" /> <xsd:attribute name="constraintName" type="xsd:string" /> </xsd:attributeGroup> <xsd:element name="dropForeignKeyConstraint"> <xsd:complexType> <xsd:attributeGroup ref="dropForeignKeyConstraintAttrib" /> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="dropAllForeignKeyConstraintsAttrib"> <xsd:attribute name="baseTableCatalogName" type="xsd:string" /> <xsd:attribute name="baseTableSchemaName" type="xsd:string" /> <xsd:attribute name="baseTableName" type="xsd:string" use="required" /> </xsd:attributeGroup> <xsd:element name="dropAllForeignKeyConstraints"> <xsd:complexType> <xsd:attributeGroup ref="dropAllForeignKeyConstraintsAttrib" /> </xsd:complexType> </xsd:element> <xsd:element name="dropNotNullConstraint"> <xsd:complexType> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="tableName" type="xsd:string" use="required" /> <xsd:attribute name="columnName" type="xsd:string" use="required" /> <xsd:attribute name="columnDataType" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="constraints"> <xsd:complexType> <xsd:attributeGroup ref="constraintsAttributes" /> </xsd:complexType> </xsd:element> <xsd:element name="column"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element ref="constraints" minOccurs="0" /> </xsd:sequence> <xsd:attributeGroup ref="column" /> </xsd:complexType> </xsd:element> <xsd:element name="param"> <xsd:complexType> <xsd:attributeGroup ref="param" /> </xsd:complexType> </xsd:element> <!-- Children for createTable --> <xsd:element name="createTable"> <xsd:complexType> <xsd:sequence> <xsd:element ref="column" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="tablespace" type="xsd:string" /> <xsd:attribute name="remarks" type="xsd:string" /> </xsd:complexType> </xsd:element> <!-- Children for createView --> <xsd:element name="createView"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> <xsd:attribute name="viewName" type="xsd:string" use="required" /> <xsd:attribute name="replaceIfExists" type="booleanExp" /> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <!-- Children for insert --> <xsd:element name="insert"> <xsd:complexType> <xsd:sequence> <xsd:element ref="column" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="dbms" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="update"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element ref="column" minOccurs="1" maxOccurs="unbounded" /> <xsd:element name="where" minOccurs="0" maxOccurs="1" /> <xsd:element ref="whereParams" minOccurs="0" maxOccurs="1" /> </xsd:sequence> <xsd:attributeGroup ref="tableNameAttribute" /> </xsd:complexType> </xsd:element> <xsd:element name="whereParams"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element ref="param" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="delete"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element name="where" minOccurs="0" maxOccurs="1" /> <xsd:element ref="whereParams" minOccurs="0" maxOccurs="1" /> </xsd:sequence> <xsd:attributeGroup ref="tableNameAttribute" /> </xsd:complexType> </xsd:element> <!-- Children for addColum --> <xsd:element name="addColumn"> <xsd:complexType> <xsd:sequence> <xsd:element ref="column" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attributeGroup ref="tableNameAttribute" /> </xsd:complexType> </xsd:element> <xsd:element name="rollback"> <xsd:complexType mixed="true"> <xsd:choice> <xsd:group ref="changeSetChildren" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> <xsd:attribute name="changeSetPath" type="xsd:string" /> <xsd:attribute name="changeSetAuthor" type="xsd:string" /> <xsd:attribute name="changeSetId" type="xsd:string" /> </xsd:complexType> </xsd:element> <!-- comment --> <xsd:element name="comment" type="xsd:string" /> <!-- sql --> <xsd:element name="sql"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element ref="comment" minOccurs="0" maxOccurs="1" /> </xsd:sequence> <xsd:attribute name="stripComments" type="booleanExp" /> <xsd:attribute name="splitStatements" type="booleanExp" /> <xsd:attribute name="endDelimiter" type="xsd:string" /> <xsd:attribute name="dbms" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="createProcedure"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element ref="comment" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="executeCommand"> <xsd:complexType> <xsd:sequence> <xsd:element name="arg" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="value" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="executable" type="xsd:string" use="required" /> <xsd:attribute name="os" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="sqlFile"> <xsd:complexType> <xsd:attribute name="path" type="xsd:string" use="required" /> <xsd:attribute name="stripComments" type="booleanExp" /> <xsd:attribute name="splitStatements" type="booleanExp" /> <xsd:attribute name="encoding" type="xsd:string" default="UTF-8"/> <xsd:attribute name="endDelimiter" type="xsd:string" /> <xsd:attribute name="relativeToChangelogFile" type="booleanExp" /> <xsd:attribute name="dbms" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="tagDatabase"> <xsd:complexType> <xsd:attribute name="tag" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="stop"> <xsd:complexType mixed="true" /> </xsd:element> <!-- renameTable --> <xsd:element name="renameTable"> <xsd:complexType> <xsd:attributeGroup ref="renameTableAttributes" /> </xsd:complexType> </xsd:element> <xsd:element name="renameView"> <xsd:complexType> <xsd:attributeGroup ref="renameViewAttributes" /> </xsd:complexType> </xsd:element> <!-- dropTable --> <xsd:element name="dropTable"> <xsd:complexType> <xsd:attributeGroup ref="dropTableAttributes" /> </xsd:complexType> </xsd:element> <xsd:element name="dropView"> <xsd:complexType> <xsd:attribute name="viewName" type="xsd:string" use="required" /> <xsd:attribute name="catalogName" type="xsd:string" /> <xsd:attribute name="schemaName" type="xsd:string" /> </xsd:complexType> </xsd:element> <!-- renameColumn --> <xsd:element name="renameColumn"> <xsd:complexType> <xsd:attributeGroup ref="renameColumnAttributes" /> </xsd:complexType> </xsd:element> <xsd:element name="dropColumn"> <xsd:complexType> <xsd:attributeGroup ref="dropColumnAttributes" /> </xsd:complexType> </xsd:element> <xsd:element name="mergeColumns"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attribute name="column1Name" type="xsd:string" use="required" /> <xsd:attribute name="joinString" type="xsd:string" use="required" /> <xsd:attribute name="column2Name" type="xsd:string" use="required" /> <xsd:attribute name="finalColumnName" type="xsd:string" use="required" /> <xsd:attribute name="finalColumnType" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:group name="whereClause"> <xsd:sequence> <xsd:element name="whereClause" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:group> <xsd:element name="createSequence"> <xsd:complexType> <xsd:attributeGroup ref="sequenceAttributes" /> <xsd:attribute name="cycle" type="booleanExp"> <xsd:annotation> <xsd:documentation> true for a cycling sequence, false for a non-cycling sequence. Default is false. </xsd:documentation> </xsd:annotation> </xsd:attribute> </xsd:complexType> </xsd:element> <xsd:element name="alterSequence"> <xsd:complexType> <xsd:attributeGroup ref="sequenceAttributes" /> </xsd:complexType> </xsd:element> <xsd:element name="dropSequence"> <xsd:complexType> <xsd:attributeGroup ref="sequenceAttributes" /> </xsd:complexType> </xsd:element> <xsd:element name="createIndex"> <xsd:complexType> <xsd:sequence> <xsd:element ref="column" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attributeGroup ref="createIndex" /> </xsd:complexType> </xsd:element> <xsd:element name="dropIndex"> <xsd:complexType> <xsd:attributeGroup ref="tableNameAttribute" /> <xsd:attributeGroup ref="indexName" /> <xsd:attribute name="associatedWith" type="xsd:string" use="optional" /> </xsd:complexType> </xsd:element> <xsd:element name="customChange"> <xsd:complexType> <xsd:sequence> <xsd:element name="param" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType mixed="true"> <xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="value" type="xsd:string" /> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="class" type="xsd:string" use="required" /> <xsd:anyAttribute processContents="lax" /> </xsd:complexType> </xsd:element> <!-- Children for changeSet --> <xsd:group name="changeSetChildren"> <xsd:choice> <xsd:element ref="comment" maxOccurs="1" /> <xsd:element ref="createTable" maxOccurs="unbounded" /> <xsd:element ref="dropTable" maxOccurs="unbounded" /> <xsd:element ref="createView" maxOccurs="unbounded" /> <xsd:element ref="renameView" maxOccurs="unbounded" /> <xsd:element ref="dropView" maxOccurs="unbounded" /> <xsd:element ref="insert" maxOccurs="unbounded" /> <xsd:element ref="addColumn" maxOccurs="unbounded" /> <xsd:element ref="sql" maxOccurs="unbounded" /> <xsd:element ref="createProcedure" maxOccurs="unbounded" /> <xsd:element ref="sqlFile" maxOccurs="unbounded" /> <xsd:element ref="renameTable" maxOccurs="unbounded" /> <xsd:element ref="renameColumn" maxOccurs="unbounded" /> <xsd:element ref="dropColumn" maxOccurs="unbounded" /> <xsd:element ref="mergeColumns" maxOccurs="unbounded" /> <xsd:element ref="modifyDataType" maxOccurs="unbounded" /> <xsd:element ref="createSequence" maxOccurs="unbounded" /> <xsd:element ref="alterSequence" maxOccurs="unbounded" /> <xsd:element ref="dropSequence" maxOccurs="unbounded" /> <xsd:element ref="createIndex" maxOccurs="unbounded" /> <xsd:element ref="dropIndex" maxOccurs="unbounded" /> <xsd:element ref="addNotNullConstraint" maxOccurs="unbounded" /> <xsd:element ref="dropNotNullConstraint" maxOccurs="unbounded" /> <xsd:element ref="addForeignKeyConstraint" maxOccurs="unbounded" /> <xsd:element ref="dropForeignKeyConstraint" maxOccurs="unbounded" /> <xsd:element ref="dropAllForeignKeyConstraints" maxOccurs="unbounded" /> <xsd:element ref="addPrimaryKey" maxOccurs="unbounded" /> <xsd:element ref="dropPrimaryKey" maxOccurs="unbounded" /> <xsd:element ref="addLookupTable" maxOccurs="unbounded" /> <xsd:element ref="addAutoIncrement" maxOccurs="unbounded" /> <xsd:element ref="addDefaultValue" maxOccurs="unbounded" /> <xsd:element ref="dropDefaultValue" maxOccurs="unbounded" /> <xsd:element ref="addUniqueConstraint" maxOccurs="unbounded" /> <xsd:element ref="dropUniqueConstraint" maxOccurs="unbounded" /> <xsd:element ref="customChange" maxOccurs="unbounded" /> <xsd:element ref="update" maxOccurs="unbounded" /> <xsd:element ref="delete" maxOccurs="unbounded" /> <xsd:element ref="loadData" maxOccurs="unbounded" /> <xsd:element ref="loadUpdateData" maxOccurs="unbounded" /> <xsd:element ref="executeCommand" maxOccurs="unbounded" /> <xsd:element ref="stop" maxOccurs="unbounded" /> <xsd:element ref="rollback" maxOccurs="1" /> <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> </xsd:group> <!-- Children for Precondition --> <xsd:group name="PreConditionChildren"> <xsd:sequence> <xsd:choice> <xsd:element ref="and" maxOccurs="unbounded" /> <xsd:element ref="or" maxOccurs="unbounded" /> <xsd:element ref="not" maxOccurs="unbounded" /> <xsd:element ref="dbms" maxOccurs="unbounded" /> <xsd:element ref="runningAs" maxOccurs="unbounded" /> <xsd:element ref="changeSetExecuted" maxOccurs="unbounded" /> <xsd:element ref="tableExists" maxOccurs="unbounded" /> <xsd:element ref="columnExists" maxOccurs="unbounded" /> <xsd:element ref="sequenceExists" maxOccurs="unbounded" /> <xsd:element ref="foreignKeyConstraintExists" maxOccurs="unbounded" /> <xsd:element ref="indexExists" maxOccurs="unbounded" /> <xsd:element ref="primaryKeyExists" maxOccurs="unbounded" /> <xsd:element ref="viewExists" maxOccurs="unbounded" /> <xsd:element ref="sqlCheck" maxOccurs="unbounded" /> <xsd:element ref="changeLogPropertyDefined" maxOccurs="unbounded" /> <xsd:element ref="expectedQuotingStrategy" maxOccurs="unbounded" /> <xsd:element ref="customPrecondition" maxOccurs="unbounded" /> <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> </xsd:sequence> </xsd:group> </xsd:schema>
changeset.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> <changeSet id="3.2_0" author="zchuano"> <tagDatabase tag="3.2" /> </changeSet> <changeSet id="3.3_1" author="zchuano" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <sqlCheck expectedResult="0">select count(id) from public.auth_resource where id in(1302,1304)</sqlCheck> </preConditions> <comment>add values in public.auth_resource </comment> <sql> insert into public.auth_resource (id,cname,full_url,status,display) values(1302,'资源列表','/admin/resource/list','true','true'); insert into public.auth_resource (id,cname,full_url,status,display) values(1304,'修改资源','/admin/resource/edit','true','false'); </sql> <rollback> <sql> delete from public.auth_resource where id = 1302; delete from public.auth_resource where id = 1304; </sql> </rollback> </changeSet> <changeSet id="3.3_2" author="zchuano" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <sqlCheck expectedResult="0">select count(id) from public.auth_model where id in(3)</sqlCheck> </preConditions> <comment>update public.auth_model resoucrce_ids</comment> <sql> update public.auth_model set resource_ids = '1001,1101,1201,1301,1302,2201' where id = 3; </sql> <rollback> <sql> update public.auth_model set resource_ids = '1001,1101,1201,1301,2201' where id = 3; </sql> </rollback> </changeSet> <changeSet id="3.3_3" author="reed" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <not><columnExists tableName="visit_info" schemaName="crm" columnName="is_again"/></not> </preConditions> <comment>alter crm.visit_info</comment> <addColumn tableName="visit_info" schemaName="crm"> <column name="is_again" type="boolean" remarks="是否再次洽谈"></column> <column name="next_time" type="timestamp" remarks="再次洽谈时间"></column> <column name="extend_info" type="VARCHAR(500)" remarks="扩展信息,保存json"></column> </addColumn> <modifyDataType tableName="visit_info" schemaName="crm" columnName="contactor_phone" newDataType="VARCHAR(60)"/> <sql> COMMENT ON COLUMN crm.visit_info.is_cooperated IS '拜访结果类型,0,初步沟通、1,暂不合作、2,有合作意向、3,洽谈细节、4,确定合作'; </sql> <rollback> <dropColumn tableName="visit_info" schemaName="crm" columnName="next_time"/> <dropColumn tableName="visit_info" schemaName="crm" columnName="is_again"/> <dropColumn tableName="visit_info" schemaName="crm" columnName="extend_info"/> </rollback> </changeSet> <!-- <changeSet id="3.3_4" author="liyang" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <sqlCheck expectedResult="0">select count(id) from public.auth_resource where id in(1730)</sqlCheck> </preConditions> <comment>add values in public.auth_resource </comment> <sql> insert into public.auth_resource (id,cname,full_url,status,display) values(1730,'合同归档','/contracts/archive/list/*','true','true'); </sql> <rollback> <sql> delete from public.auth_resource where id = 1730; </sql> </rollback> </changeSet>--> <changeSet id="3.3_5" author="zchuano" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <sqlCheck expectedResult="0">select count(id) from public.auth_resource where id in(1303)</sqlCheck> </preConditions> <comment>add values in public.auth_resource </comment> <sql> insert into public.auth_resource (id,cname,full_url,status,display) values(1303,'添加资源','/admin/resource/add/save','true','false'); </sql> <rollback> <sql> delete from public.auth_resource where id = 1303; </sql> </rollback> </changeSet> <!-- <changeSet id="3.3_6" author="liyang" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <sqlCheck expectedResult="0">select count(*) from public.auth_model where ','||resource_ids||',' like '%,1730,%' and id = 4</sqlCheck> </preConditions> <comment>add contracts archive resources to model 4 (合同管理)</comment> <sql> update public.auth_model set resource_ids=resource_ids ||',1730' where id = 4; </sql> <rollback> <sql> update public.auth_model set resource_ids = substring(resource_ids from 1 for (char_length(resource_ids)-char_length(',1730'))) where id = 4; </sql> </rollback> </changeSet> --> <changeSet id="3.3_7" author="chenqx" runOnChange="true"> <preConditions onFail="MARK_RAN"> <not><tableExists schemaName="crm" tableName="prepay_transfer"/></not> <and> <not><tableExists schemaName="history" tableName="prepay_transfer_history"/></not> </and> </preConditions> <sql> CREATE TABLE crm.prepay_transfer ( id bigserial NOT NULL, order_sn character varying(50) NOT NULL, special_id bigint NOT NULL, cont_num character varying(60) NOT NULL, sp_id bigint NOT NULL, money numeric(10,2) NOT NULL, prebuy_number bigint , bank_name character varying(60) NOT NULL, bank_child_name character varying(200) NOT NULL, bank_account_number character varying(50) NOT NULL, bank_account_name character varying(50) NOT NULL, supplier_mobile character varying(50), bank_province character varying(50) NOT NULL, bank_city character varying(50) NOT NULL, author_uid bigint NOT NULL, payment_uid bigint NOT NULL, payment_ratio numeric(10,2) , payment_status smallint NOT NULL DEFAULT 0, payment_time timestamp with time zone , ctime timestamp with time zone NOT NULL DEFAULT now(), mtime timestamp with time zone NOT NULL DEFAULT now() ) WITH ( OIDS = FALSE ) ; ALTER TABLE crm.prepay_transfer ADD CONSTRAINT pk_prepay_transfer PRIMARY KEY(id); ALTER TABLE crm.prepay_transfer ADD CONSTRAINT "unique_prepay_transfer_odersn" UNIQUE (order_sn); ALTER TABLE crm.prepay_transfer OWNER TO crm_cms_owner; GRANT ALL ON TABLE crm.prepay_transfer TO crm_cms_owner; GRANT SELECT, UPDATE, INSERT ON TABLE crm.prepay_transfer TO group_crm; COMMENT ON TABLE crm.prepay_transfer IS '预付款转账记录表'; COMMENT ON COLUMN crm.prepay_transfer.id IS 'pk'; COMMENT ON COLUMN crm.prepay_transfer.order_sn IS '订单流水号'; COMMENT ON COLUMN crm.prepay_transfer.special_id IS 'reference: crm.special.id'; COMMENT ON COLUMN crm.prepay_transfer.cont_num IS 'reference: crm.contract.cont_num'; COMMENT ON COLUMN crm.prepay_transfer.sp_id IS 'reference: crm.supplier.id'; COMMENT ON COLUMN crm.prepay_transfer.money IS 'prepay money'; COMMENT ON COLUMN crm.prepay_transfer.author_uid IS 'reference: crm.special.author_uid'; COMMENT ON COLUMN crm.prepay_transfer.payment_uid IS '出纳员工号,cashier-uid'; COMMENT ON COLUMN crm.prepay_transfer.prebuy_number IS '申请数量,from crm.special.description'; COMMENT ON COLUMN crm.prepay_transfer.payment_ratio IS '付款比例,from transfer response'; COMMENT ON COLUMN crm.prepay_transfer.payment_time IS '实际出款时间,from transfer response'; COMMENT ON COLUMN crm.prepay_transfer.payment_status IS '打款状态:0-未打款 2-等待银行反馈 3失败 7成功 10退票'; ALTER TABLE crm.prepay_transfer_id_seq OWNER TO crm_cms_owner; GRANT ALL ON TABLE crm.prepay_transfer_id_seq TO crm_cms_owner; GRANT ALL ON TABLE crm.prepay_transfer_id_seq TO group_crm_cms; GRANT SELECT, UPDATE, INSERT ON TABLE crm.prepay_transfer_id_seq TO group_crm; CREATE TRIGGER trg_prepay_transfer_before_update BEFORE UPDATE ON crm.prepay_transfer FOR EACH ROW EXECUTE PROCEDURE tfun_set_mtime(); COMMENT ON TRIGGER trg_prepay_transfer_before_update ON crm.prepay_transfer IS 'set column mtime'; CREATE INDEX idx_prepay_transfer_contnum ON crm.prepay_transfer USING btree (cont_num); CREATE INDEX idx_prepay_transfer_spid ON crm.prepay_transfer USING btree (sp_id); CREATE INDEX idx_prepay_transfer_ordersn ON crm.prepay_transfer USING btree (order_sn); CREATE TABLE history.prepay_transfer_history ( dbuser character varying(50), userip cidr, id bigint NOT NULL, order_sn character varying(50) NOT NULL, special_id bigint NOT NULL, cont_num character varying(60) NOT NULL, sp_id bigint NOT NULL, money numeric(10,2) NOT NULL, prebuy_number bigint , bank_name character varying(60) NOT NULL, bank_child_name character varying(200) NOT NULL, bank_account_number character varying(50) NOT NULL, bank_account_name character varying(50) NOT NULL, supplier_mobile character varying(50), bank_province character varying(50) NOT NULL, bank_city character varying(50) NOT NULL, author_uid bigint NOT NULL, payment_uid bigint NOT NULL, payment_ratio numeric(10,2) , payment_status smallint NOT NULL, payment_time timestamp with time zone , ctime timestamp with time zone NOT NULL DEFAULT now(), mtime timestamp with time zone NOT NULL DEFAULT now() ) WITH ( OIDS = FALSE ) ; ALTER TABLE history.prepay_transfer_history OWNER TO crm_cms_owner; GRANT ALL ON TABLE history.prepay_transfer_history TO crm_cms_owner; GRANT SELECT, UPDATE, INSERT ON TABLE history.prepay_transfer_history TO group_crm_cms; GRANT SELECT, UPDATE, INSERT ON TABLE history.prepay_transfer_history TO group_crm; COMMENT ON TABLE history.prepay_transfer_history IS '预付款转账记录历史表'; CREATE INDEX idx_prepay_transfer_history_ordersn ON history.prepay_transfer_history USING btree (order_sn); CREATE OR REPLACE FUNCTION crm.tfun_after_prepay_transfer() RETURNS trigger AS ' begin insert into history.prepay_transfer_history values(user,inet_client_addr(),NEW.*); return NEW ;end;'LANGUAGE plpgsql ; ALTER FUNCTION crm.tfun_after_prepay_transfer() OWNER TO crm_cms_owner; CREATE TRIGGER trg_prepay_transfer_after AFTER INSERT OR UPDATE ON crm.prepay_transfer FOR EACH ROW EXECUTE PROCEDURE crm.tfun_after_prepay_transfer(); COMMENT ON TRIGGER trg_prepay_transfer_after ON crm.prepay_transfer IS '插入或更新后,记录历史流水表'; </sql> <rollback> <dropTable schemaName="history" tableName="prepay_transfer_history"/> <dropTable schemaName="crm" tableName="prepay_transfer"/> </rollback> </changeSet> <changeSet id="3.3_8" author="zchuano" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <sqlCheck expectedResult="0">select count(id) from public.auth_resource where id in(1305,1306,1307)</sqlCheck> </preConditions> <comment>add values in public.auth_resource </comment> <sql> insert into public.auth_resource (id,cname,full_url,status,display) values(1305,'模块列表','/admin/model/list','true','true'); insert into public.auth_resource (id,cname,full_url,status,display) values(1306,'更新模块','/admin/model/updateresource/*','true','false'); insert into public.auth_resource (id,cname,full_url,status,display) values(1307,'禁用模块','/admin/model/disablemodel/*','true','false'); </sql> <rollback> <sql> delete from public.auth_resource where id = 1305; delete from public.auth_resource where id = 1306; delete from public.auth_resource where id = 1307; </sql> </rollback> </changeSet> <changeSet id="3.3_9" author="zchuano" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <sqlCheck expectedResult="0">select count(id) from public.auth_model where id in(3)</sqlCheck> </preConditions> <comment>update public.auth_model resoucrce_ids</comment> <sql> update public.auth_model set resource_ids = '1001,1101,1201,1301,1302,1305,2201' where id = 3; </sql> <rollback> <sql> update public.auth_model set resource_ids = '1001,1101,1201,1301,1302,2201' where id = 3; </sql> </rollback> </changeSet> <changeSet id="3.3_10" author="alvin" runOnChange="true"> <comment>update crm.contract lrname </comment> <sql> ALTER TABLE crm.contract ALTER COLUMN lrname TYPE character varying(50); </sql> </changeSet> <changeSet id="3.3_11" author="alvin" runOnChange="true"> <comment>update crm.contract lrname </comment> <sql> ALTER TABLE history.contract_history ALTER COLUMN lrname TYPE character varying(50); </sql> </changeSet> <changeSet id="3.3_12" author="chenqx" runOnChange="true"> <preConditions onFail="MARK_RAN" onSqlOutput="TEST"> <sqlCheck expectedResult="电子券类型"> select c.description from pg_attribute a ,pg_class b,pg_description c where a.attrelid = b.oid and c.objoid = b.oid and c.objsubid = a.attnum and b.relname='deal' and a.attname = 'e_voucher_type' </sqlCheck> </preConditions> <comment>fix comments on column</comment> <sql> COMMENT ON column crm.contract.status is '状态,refer to public.data_dictionary.[crm.contract.status]'; COMMENT ON column crm.contract.source is '来源,refer to public.data_dictionary.[crm.contract.source]'; COMMENT ON column crm.contract_bank.source is '来源,refer to public.data_dictionary.[crm.contract_bank.source]'; COMMENT ON column crm.contract_bank.bank_account_type is '账户类型,refer to public.data_dictionary.[crm.contract_bank.bank_account_type]'; COMMENT ON column crm.contract_child.status is '状态,refer to public.data_dictionary.[crm.contract_child.status]'; COMMENT ON column crm.contract_child.source is '来源,refer to public.data_dictionary.[crm.contract.source]'; COMMENT ON column crm.contract_child.payment_type is '付款方式,refer to public.data_dictionary.[crm.contract_child.payment_type]'; COMMENT ON column crm.supplier.status is '状态,refer to public.data_dictionary.[crm.supplier.status]'; COMMENT ON column crm.merchant.source is '来源,refer to public.data_dictionary.[crm.contract.source]'; COMMENT ON column crm.supplier_qualification.source is '来源,refer to public.data_dictionary.[crm.contract.source]'; COMMENT ON column crm.visit_info.source is '来源,refer to public.data_dictionary.[crm.contract.source]'; COMMENT ON column crm.special.status is '状态,refer to public.data_dictionary.[crm.special.status]'; COMMENT ON column crm.special.source is '来源,refer to public.data_dictionary.[crm.contract.source]'; COMMENT ON column crm.special.payment_type is '付款方式,refer to public.data_dictionary.[crm.special.payment_type]'; COMMENT ON column crm.special.prepay_type is '预付类型,refer to public.data_dictionary.[crm.special.prepay_type]'; COMMENT ON column cms.deal.status is '状态,refer to public.data_dictionary.[cms.deal.status]'; COMMENT ON column cms.deal.e_voucher_type is '电子券类型,refer to public.data_dictionary.[cms.deal.e_voucher_type]'; </sql> </changeSet> </databaseChangeLog>
相关推荐
使用Spring Boot开发Liquibase数据库 掌握: 发展: 指示 查看中篇更新说明
android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...
这是一个完全人为的例子...请不要批评数据模型。 该项目的目的是解释 Liquibase 工具的工作原理。
模拟binder通信的demo模拟binder通信的demo模拟binder通信的demo模拟binder通信的demo模拟binder通信的demo模拟binder通信的demo模拟binder通信的demo模拟binder通信的demo模拟binder通信的demo模拟binder通信的demo...
clientDEMO,监控必备软件,监控调试助手,网络必备 clientDEMO,监控必备软件,监控调试助手,网络必备
最近有个项目模块需要用到TCP Socket通讯,遇到了一个大坑,所以做了这个Demo。 本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int...
后台管理系统demo 后台管理系统demo 后台管理系统demo 后台管理系统demo
Demo3D培训课程ppt
cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7cubedemo-0.3.7
ppt demo ppt demo 私人收藏,工业类的模板共分享
极光推送 java服务器demo、Android客户端demo极光推送 java服务器demo、Android客户端demo
全球DEMO大赛得奖作品欣赏之一:幽灵古堡 (65K) <br>我们曾经给大家推荐过很多0DAY组织的自制DEMO,完全用源代码编写,是用来炫耀 <br>本组织技术的。而各组织之间的竞争也会通过全球DEMO大赛来进行,比赛规则...
cmake demo cmake demo cmake demo cmake demo cmake demo cmake demo cmake demo
帮朋友制作的视频加密播放器Demo,压缩密码请向本人索取
华为推送 demo 官方原版 华为推送 demo 官方原版 华为推送 demo 官方原版 华为推送 demo 官方原版 华为推送 demo 官方原版 华为推送 demo 官方原版
此websocket demo是客户端是html写的。这是一个比较完善的项目demo,可以通过此demo学习怎么编写websocket项目
GB28181可以用的DEMO GB28181可以用的DEMO GB28181可以用的DEMO
网上在线考试系统DEMO网上在线考试系统DEMO网上在线考试系统DEMO网上在线考试系统DEMO网上在线考试系统DEMO
完整的android 安卓入门demo,包含了所有的控件、服务及广播等等,看完想不会都难
微信小程序DEMO