Extend AbstractChange

A class is extended AbstractChange to add a random UUID to a column:

  1. public class AddGuidColumnChange extends AbstractChange

And it is registered as

  1. <?xml version="1.0" encoding="UTF-8"?>

    <xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema
    targetNamespace=“http://www.mycompany.com/liquibase/xml/ns/dbchangelog-ext
        xmlns=“http://www.liquibase.org/xml/ns/dbchangelog-ext
       
        elementFormDefault=“qualified”>

        <xsd:element name=“addGuidColumn”>
            xsd:complexType
                <xsd:attribute name=“schemaName” type=“xsd:string” />
                <xsd:attribute name=“tableName” type=“xsd:string” use=“required” />
                <xsd:attribute name=“primaryKey” type=“xsd:string” use=“required” />
                <xsd:attribute name=“columnName” type=“xsd:string” use=“optional” default=“GUID” />
                <xsd:attribute name=“columnType” type=“xsd:string” use=“optional” default=“VARCHAR(64)” />
            </xsd:complexType>
        </xsd:element>

    </xsd:schema>

In the changelog, try to use it as:

  1. <?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” xmlns:mc=“http://www.mycompany.com/liquibase/xml/ns/dbchangelog-ext
        xsi:schemaLocation=“http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
        logicalFilePath=“com/mycompany/core/db/changelog-1.xml”>
  2.    
           
           
       

But got errror:


What settings have been missed?

Thank you very much, Jing

   
        mc:addGuidColumn
   

Thank you very much.

After add the namespace, then have new error:

java.sql.SQLException: Table not found in statement [SELECT PRIMARYkEY_1  FROM TTEST]      at org.hsqldb.jdbc.Util.sqlException(Unknown Source)      at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)      at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source)      at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)      at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)      at liquibase.executor.jvm.JdbcExecutor$1QueryStatementCallback.doInStatement(JdbcExecutor.java:128)      at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)      at liquibase.executor.jvm.JdbcExecutor.query(JdbcExecutor.java:142)      at liquibase.executor.jvm.JdbcExecutor.query(JdbcExecutor.java:150)      at liquibase.executor.jvm.JdbcExecutor.queryForList(JdbcExecutor.java:202)      at liquibase.executor.jvm.JdbcExecutor.queryForList(JdbcExecutor.java:197)      at liquibase.ext.mycompany.AddGuidColumnChange.addGuidValue(AddGuidColumnChange.java:142)      at liquibase.ext.mycompany.AddGuidColumnChange.generateStatements(AddGuidColumnChange.java:200)      at liquibase.change.AbstractChange.warn(AbstractChange.java:78
It seems the schemaname is not set. But the change should detect the current used schema, right? as AddColumn does not need schemaname to be set.

Any ideas?

Thanks, Jing