Rename a few columns to not conflict with res´rved words
This commit is contained in:
parent
7488047686
commit
ee7cff9445
|
@ -0,0 +1,31 @@
|
||||||
|
package ca.uhn.fhir.jpa.binstore;
|
||||||
|
|
||||||
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
|
||||||
|
public class NullBinaryStorageSvcImpl implements IBinaryStorageSvc {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldStoreBlob(long theSize, IIdType theResourceId, String theContentType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StoredDetails storeBlob(IIdType theResourceId, String theContentType, InputStream theInputStream) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StoredDetails fetchBlobDetails(IIdType theResourceId, String theBlobId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeBlob(IIdType theResourceId, String theBlobId, OutputStream theOutputStream) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,7 +48,7 @@ import java.util.Date;
|
||||||
", h.res_updated as res_updated " +
|
", h.res_updated as res_updated " +
|
||||||
", h.res_text as res_text " +
|
", h.res_text as res_text " +
|
||||||
", h.res_encoding as res_encoding " +
|
", h.res_encoding as res_encoding " +
|
||||||
", f.forced_id as forced_pid " +
|
", f.forced_id as FORCED_PID " +
|
||||||
"FROM HFJ_RES_VER h "
|
"FROM HFJ_RES_VER h "
|
||||||
+ " LEFT OUTER JOIN HFJ_FORCED_ID f ON f.resource_pid = h.res_id "
|
+ " LEFT OUTER JOIN HFJ_FORCED_ID f ON f.resource_pid = h.res_id "
|
||||||
+ " INNER JOIN HFJ_RESOURCE r ON r.res_id = h.res_id and r.res_ver = h.res_ver")
|
+ " INNER JOIN HFJ_RESOURCE r ON r.res_id = h.res_id and r.res_ver = h.res_ver")
|
||||||
|
@ -97,7 +97,7 @@ public class ResourceSearchView implements IBaseResourceEntity, Serializable {
|
||||||
@Enumerated(EnumType.STRING)
|
@Enumerated(EnumType.STRING)
|
||||||
private ResourceEncodingEnum myEncoding;
|
private ResourceEncodingEnum myEncoding;
|
||||||
|
|
||||||
@Column(name = "forced_pid", length= ForcedId.MAX_FORCED_ID_LENGTH)
|
@Column(name = "FORCED_PID", length= ForcedId.MAX_FORCED_ID_LENGTH)
|
||||||
private String myForcedPid;
|
private String myForcedPid;
|
||||||
|
|
||||||
public ResourceSearchView() {
|
public ResourceSearchView() {
|
||||||
|
|
|
@ -44,7 +44,7 @@ import static org.apache.commons.lang3.StringUtils.length;
|
||||||
@Entity
|
@Entity
|
||||||
@Indexed(interceptor = DeferConceptIndexingInterceptor.class)
|
@Indexed(interceptor = DeferConceptIndexingInterceptor.class)
|
||||||
@Table(name = "TRM_CONCEPT", uniqueConstraints = {
|
@Table(name = "TRM_CONCEPT", uniqueConstraints = {
|
||||||
@UniqueConstraint(name = "IDX_CONCEPT_CS_CODE", columnNames = {"CODESYSTEM_PID", "CODE"})
|
@UniqueConstraint(name = "IDX_CONCEPT_CS_CODE", columnNames = {"CODESYSTEM_PID", "CODEVAL"})
|
||||||
}, indexes = {
|
}, indexes = {
|
||||||
@Index(name = "IDX_CONCEPT_INDEXSTATUS", columnList = "INDEX_STATUS"),
|
@Index(name = "IDX_CONCEPT_INDEXSTATUS", columnList = "INDEX_STATUS"),
|
||||||
@Index(name = "IDX_CONCEPT_UPDATED", columnList = "CONCEPT_UPDATED")
|
@Index(name = "IDX_CONCEPT_UPDATED", columnList = "CONCEPT_UPDATED")
|
||||||
|
@ -60,7 +60,7 @@ public class TermConcept implements Serializable {
|
||||||
@OneToMany(fetch = FetchType.LAZY, mappedBy = "myParent", cascade = {})
|
@OneToMany(fetch = FetchType.LAZY, mappedBy = "myParent", cascade = {})
|
||||||
private Collection<TermConceptParentChildLink> myChildren;
|
private Collection<TermConceptParentChildLink> myChildren;
|
||||||
|
|
||||||
@Column(name = "CODE", nullable = false, length = MAX_CODE_LENGTH)
|
@Column(name = "CODEVAL", nullable = false, length = MAX_CODE_LENGTH)
|
||||||
@Fields({@Field(name = "myCode", index = org.hibernate.search.annotations.Index.YES, store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "exactAnalyzer")),})
|
@Fields({@Field(name = "myCode", index = org.hibernate.search.annotations.Index.YES, store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "exactAnalyzer")),})
|
||||||
private String myCode;
|
private String myCode;
|
||||||
@Temporal(TemporalType.TIMESTAMP)
|
@Temporal(TemporalType.TIMESTAMP)
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class TermValueSet implements Serializable {
|
||||||
@Column(name = "RES_ID", insertable = false, updatable = false)
|
@Column(name = "RES_ID", insertable = false, updatable = false)
|
||||||
private Long myResourcePid;
|
private Long myResourcePid;
|
||||||
|
|
||||||
@Column(name = "NAME", nullable = true, length = MAX_NAME_LENGTH)
|
@Column(name = "VSNAME", nullable = true, length = MAX_NAME_LENGTH)
|
||||||
private String myName;
|
private String myName;
|
||||||
|
|
||||||
@OneToMany(mappedBy = "myValueSet")
|
@OneToMany(mappedBy = "myValueSet")
|
||||||
|
|
|
@ -36,7 +36,7 @@ import static org.apache.commons.lang3.StringUtils.left;
|
||||||
import static org.apache.commons.lang3.StringUtils.length;
|
import static org.apache.commons.lang3.StringUtils.length;
|
||||||
|
|
||||||
@Table(name = "TRM_VALUESET_CONCEPT", indexes = {
|
@Table(name = "TRM_VALUESET_CONCEPT", indexes = {
|
||||||
@Index(name = "IDX_VALUESET_CONCEPT_CS_CD", columnList = "SYSTEM, CODE")
|
@Index(name = "IDX_VALUESET_CONCEPT_CS_CD", columnList = "SYSTEM, CODEVAL")
|
||||||
})
|
})
|
||||||
@Entity()
|
@Entity()
|
||||||
public class TermValueSetConcept implements Serializable {
|
public class TermValueSetConcept implements Serializable {
|
||||||
|
@ -58,10 +58,10 @@ public class TermValueSetConcept implements Serializable {
|
||||||
@Transient
|
@Transient
|
||||||
private String myValueSetName;
|
private String myValueSetName;
|
||||||
|
|
||||||
@Column(name = "SYSTEM", nullable = false, length = TermCodeSystem.MAX_URL_LENGTH)
|
@Column(name = "SYSTEM_URL", nullable = false, length = TermCodeSystem.MAX_URL_LENGTH)
|
||||||
private String mySystem;
|
private String mySystem;
|
||||||
|
|
||||||
@Column(name = "CODE", nullable = false, length = TermConcept.MAX_CODE_LENGTH)
|
@Column(name = "CODEVAL", nullable = false, length = TermConcept.MAX_CODE_LENGTH)
|
||||||
private String myCode;
|
private String myCode;
|
||||||
|
|
||||||
@Column(name = "DISPLAY", nullable = true, length = TermConcept.MAX_DESC_LENGTH)
|
@Column(name = "DISPLAY", nullable = true, length = TermConcept.MAX_DESC_LENGTH)
|
||||||
|
|
|
@ -20,10 +20,12 @@ package ca.uhn.fhir.jpa.util;
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import ca.uhn.fhir.rest.api.Constants;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.reflect.ClassPath;
|
import com.google.common.reflect.ClassPath;
|
||||||
import com.google.common.reflect.ClassPath.ClassInfo;
|
import com.google.common.reflect.ClassPath.ClassInfo;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
import org.hibernate.validator.constraints.Length;
|
import org.hibernate.validator.constraints.Length;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
@ -32,20 +34,25 @@ import org.hl7.fhir.r4.model.InstantType;
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.lang.reflect.AnnotatedElement;
|
import java.lang.reflect.AnnotatedElement;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.google.common.base.Ascii.toUpperCase;
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
|
|
||||||
public class TestUtil {
|
public class TestUtil {
|
||||||
|
public static final int MAX_COL_LENGTH = 2000;
|
||||||
private static final int MAX_LENGTH = 30;
|
private static final int MAX_LENGTH = 30;
|
||||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(TestUtil.class);
|
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(TestUtil.class);
|
||||||
public static final int MAX_COL_LENGTH = 2000;
|
private static Set<String> ourReservedWords;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* non instantiable
|
* non instantiable
|
||||||
|
@ -59,6 +66,16 @@ public class TestUtil {
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("UnstableApiUsage")
|
@SuppressWarnings("UnstableApiUsage")
|
||||||
public static void scanEntities(String packageName) throws IOException, ClassNotFoundException {
|
public static void scanEntities(String packageName) throws IOException, ClassNotFoundException {
|
||||||
|
|
||||||
|
try (InputStream is = TestUtil.class.getResourceAsStream("/mysql-reserved-words.txt")) {
|
||||||
|
String contents = IOUtils.toString(is, Constants.CHARSET_UTF8);
|
||||||
|
String[] words = contents.split("\\n");
|
||||||
|
ourReservedWords = Arrays.stream(words)
|
||||||
|
.filter(t -> isNotBlank(t))
|
||||||
|
.map(t -> toUpperCase(t))
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
|
||||||
ImmutableSet<ClassInfo> classes = ClassPath.from(TestUtil.class.getClassLoader()).getTopLevelClasses(packageName);
|
ImmutableSet<ClassInfo> classes = ClassPath.from(TestUtil.class.getClassLoader()).getTopLevelClasses(packageName);
|
||||||
Set<String> names = new HashSet<String>();
|
Set<String> names = new HashSet<String>();
|
||||||
|
|
||||||
|
@ -141,7 +158,10 @@ public class TestUtil {
|
||||||
|
|
||||||
JoinColumn joinColumn = theAnnotatedElement.getAnnotation(JoinColumn.class);
|
JoinColumn joinColumn = theAnnotatedElement.getAnnotation(JoinColumn.class);
|
||||||
if (joinColumn != null) {
|
if (joinColumn != null) {
|
||||||
assertNotADuplicateName(joinColumn.name(), null);
|
String columnName = joinColumn.name();
|
||||||
|
validateColumnName(columnName, theAnnotatedElement);
|
||||||
|
|
||||||
|
assertNotADuplicateName(columnName, null);
|
||||||
ForeignKey fk = joinColumn.foreignKey();
|
ForeignKey fk = joinColumn.foreignKey();
|
||||||
if (theIsSuperClass) {
|
if (theIsSuperClass) {
|
||||||
Validate.isTrue(isBlank(fk.name()), "Foreign key on " + theAnnotatedElement.toString() + " has a name() and should not as it is a superclass");
|
Validate.isTrue(isBlank(fk.name()), "Foreign key on " + theAnnotatedElement.toString() + " has a name() and should not as it is a superclass");
|
||||||
|
@ -155,7 +175,10 @@ public class TestUtil {
|
||||||
|
|
||||||
Column column = theAnnotatedElement.getAnnotation(Column.class);
|
Column column = theAnnotatedElement.getAnnotation(Column.class);
|
||||||
if (column != null) {
|
if (column != null) {
|
||||||
assertNotADuplicateName(column.name(), null);
|
String columnName = column.name();
|
||||||
|
validateColumnName(columnName, theAnnotatedElement);
|
||||||
|
|
||||||
|
assertNotADuplicateName(columnName, null);
|
||||||
Validate.isTrue(column.unique() == false, "Should not use unique attribute on column (use named @UniqueConstraint instead) on " + theAnnotatedElement.toString());
|
Validate.isTrue(column.unique() == false, "Should not use unique attribute on column (use named @UniqueConstraint instead) on " + theAnnotatedElement.toString());
|
||||||
|
|
||||||
boolean hasLob = theAnnotatedElement.getAnnotation(Lob.class) != null;
|
boolean hasLob = theAnnotatedElement.getAnnotation(Lob.class) != null;
|
||||||
|
@ -208,6 +231,15 @@ public class TestUtil {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void validateColumnName(String theColumnName, AnnotatedElement theElement) {
|
||||||
|
if (!theColumnName.equals(theColumnName.toUpperCase())) {
|
||||||
|
throw new IllegalArgumentException("Column name must be all upper case: " + theColumnName + " found on " + theElement);
|
||||||
|
}
|
||||||
|
if (ourReservedWords.contains(theColumnName)) {
|
||||||
|
throw new IllegalArgumentException("Column name is a reserved word: " + theColumnName + " found on " + theElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void assertEquals(String theGenerator, String theName) {
|
private static void assertEquals(String theGenerator, String theName) {
|
||||||
Validate.isTrue(theGenerator.equals(theName));
|
Validate.isTrue(theGenerator.equals(theName));
|
||||||
}
|
}
|
||||||
|
@ -250,5 +282,4 @@ public class TestUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package ca.uhn.fhir.jpa.binstore;
|
||||||
|
|
||||||
|
import org.hl7.fhir.r4.model.IdType;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
|
||||||
|
public class NullBinaryStorageSvcImplTest {
|
||||||
|
|
||||||
|
private NullBinaryStorageSvcImpl mySvc = new NullBinaryStorageSvcImpl();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldStoreBlob() {
|
||||||
|
assertFalse(mySvc.shouldStoreBlob(1, new IdType("Patient/2"), "application/json"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = UnsupportedOperationException.class)
|
||||||
|
public void storeBlob() {
|
||||||
|
mySvc.storeBlob(null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = UnsupportedOperationException.class)
|
||||||
|
public void fetchBlobDetails() {
|
||||||
|
mySvc.fetchBlobDetails(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = UnsupportedOperationException.class)
|
||||||
|
public void writeBlob() {
|
||||||
|
mySvc.writeBlob(null, null, null);
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,6 +33,7 @@ public class RenameColumnTask extends BaseTableTask<RenameColumnTask> {
|
||||||
private static final Logger ourLog = LoggerFactory.getLogger(RenameColumnTask.class);
|
private static final Logger ourLog = LoggerFactory.getLogger(RenameColumnTask.class);
|
||||||
private String myOldName;
|
private String myOldName;
|
||||||
private String myNewName;
|
private String myNewName;
|
||||||
|
private boolean myAllowNeitherColumnToExist;
|
||||||
|
|
||||||
public void setOldName(String theOldName) {
|
public void setOldName(String theOldName) {
|
||||||
Validate.notBlank(theOldName);
|
Validate.notBlank(theOldName);
|
||||||
|
@ -53,6 +54,9 @@ public class RenameColumnTask extends BaseTableTask<RenameColumnTask> {
|
||||||
throw new SQLException("Can not rename " + getTableName() + "." + myOldName + " to " + myNewName + " because both columns exist!");
|
throw new SQLException("Can not rename " + getTableName() + "." + myOldName + " to " + myNewName + " because both columns exist!");
|
||||||
}
|
}
|
||||||
if (!haveOldName && !haveNewName) {
|
if (!haveOldName && !haveNewName) {
|
||||||
|
if (isAllowNeitherColumnToExist()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
throw new SQLException("Can not rename " + getTableName() + "." + myOldName + " to " + myNewName + " because neither column exists!");
|
throw new SQLException("Can not rename " + getTableName() + "." + myOldName + " to " + myNewName + " because neither column exists!");
|
||||||
}
|
}
|
||||||
if (haveNewName) {
|
if (haveNewName) {
|
||||||
|
@ -89,4 +93,12 @@ public class RenameColumnTask extends BaseTableTask<RenameColumnTask> {
|
||||||
executeSql(getTableName(), sql);
|
executeSql(getTableName(), sql);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setAllowNeitherColumnToExist(boolean theAllowNeitherColumnToExist) {
|
||||||
|
myAllowNeitherColumnToExist = theAllowNeitherColumnToExist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAllowNeitherColumnToExist() {
|
||||||
|
return myAllowNeitherColumnToExist;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,16 @@ public class HapiFhirJpaMigrationTasks extends BaseMigrationTasks<VersionEnum> {
|
||||||
.renameColumn("mySystemVersion", "SYSTEM_VERSION")
|
.renameColumn("mySystemVersion", "SYSTEM_VERSION")
|
||||||
.renameColumn("myValueSet", "VALUESET_URL");
|
.renameColumn("myValueSet", "VALUESET_URL");
|
||||||
|
|
||||||
|
version.onTable("TRM_VALUESET")
|
||||||
|
.renameColumn("NAME", "VSNAME", true);
|
||||||
|
|
||||||
|
version.onTable("TRM_VALUESET_CONCEPT")
|
||||||
|
.renameColumn("CODE", "CODEVAL", true)
|
||||||
|
.renameColumn("SYSTEM", "SYSTEM_URL", true);
|
||||||
|
|
||||||
|
version.onTable("TRM_CONCEPT")
|
||||||
|
.renameColumn("CODE", "CODEVAL");
|
||||||
|
|
||||||
// TermValueSet
|
// TermValueSet
|
||||||
version.startSectionWithMessage("Processing table: TRM_VALUESET");
|
version.startSectionWithMessage("Processing table: TRM_VALUESET");
|
||||||
version.addIdGenerator("SEQ_VALUESET_PID");
|
version.addIdGenerator("SEQ_VALUESET_PID");
|
||||||
|
|
|
@ -168,10 +168,15 @@ public class BaseMigrationTasks<T extends Enum> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public BuilderWithTableName renameColumn(String theOldName, String theNewName) {
|
public BuilderWithTableName renameColumn(String theOldName, String theNewName) {
|
||||||
|
return renameColumn(theOldName, theNewName, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BuilderWithTableName renameColumn(String theOldName, String theNewName, boolean theAllowNeitherColumnToExist) {
|
||||||
RenameColumnTask task = new RenameColumnTask();
|
RenameColumnTask task = new RenameColumnTask();
|
||||||
task.setTableName(myTableName);
|
task.setTableName(myTableName);
|
||||||
task.setOldName(theOldName);
|
task.setOldName(theOldName);
|
||||||
task.setNewName(theNewName);
|
task.setNewName(theNewName);
|
||||||
|
task.setAllowNeitherColumnToExist(theAllowNeitherColumnToExist);
|
||||||
addTask(task);
|
addTask(task);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class RenameColumnTaskTest extends BaseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNeitherColumnExists() throws SQLException {
|
public void testNeitherColumnExists() {
|
||||||
executeSql("create table SOMETABLE (PID bigint not null)");
|
executeSql("create table SOMETABLE (PID bigint not null)");
|
||||||
|
|
||||||
RenameColumnTask task = new RenameColumnTask();
|
RenameColumnTask task = new RenameColumnTask();
|
||||||
|
@ -65,7 +65,21 @@ public class RenameColumnTaskTest extends BaseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBothColumnsExist() throws SQLException {
|
public void testNeitherColumnExistsButAllowed() {
|
||||||
|
executeSql("create table SOMETABLE (PID bigint not null)");
|
||||||
|
|
||||||
|
RenameColumnTask task = new RenameColumnTask();
|
||||||
|
task.setTableName("SOMETABLE");
|
||||||
|
task.setOldName("myTextCol");
|
||||||
|
task.setNewName("TEXTCOL");
|
||||||
|
task.setAllowNeitherColumnToExist(true);
|
||||||
|
getMigrator().addTask(task);
|
||||||
|
|
||||||
|
getMigrator().migrate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBothColumnsExist() {
|
||||||
executeSql("create table SOMETABLE (PID bigint not null, PID2 bigint)");
|
executeSql("create table SOMETABLE (PID bigint not null, PID2 bigint)");
|
||||||
|
|
||||||
RenameColumnTask task = new RenameColumnTask();
|
RenameColumnTask task = new RenameColumnTask();
|
||||||
|
|
|
@ -0,0 +1,818 @@
|
||||||
|
ACCESSIBLE
|
||||||
|
ACCOUNT
|
||||||
|
ACTION
|
||||||
|
ACTIVE
|
||||||
|
ADD
|
||||||
|
ADMIN
|
||||||
|
AFTER
|
||||||
|
AGAINST
|
||||||
|
AGGREGATE
|
||||||
|
ALGORITHM
|
||||||
|
ALL
|
||||||
|
ALTER
|
||||||
|
ALWAYS
|
||||||
|
ANALYSE
|
||||||
|
ANALYZE
|
||||||
|
AND
|
||||||
|
ANY
|
||||||
|
ARRAY
|
||||||
|
AS
|
||||||
|
ASC
|
||||||
|
ASCII
|
||||||
|
ASENSITIVE
|
||||||
|
AT
|
||||||
|
AUTOEXTEND_SIZE
|
||||||
|
AUTO_INCREMENT
|
||||||
|
AVG
|
||||||
|
AVG_ROW_LENGTH
|
||||||
|
B
|
||||||
|
BACKUP
|
||||||
|
BEFORE
|
||||||
|
BEGIN
|
||||||
|
BETWEEN
|
||||||
|
BIGINT
|
||||||
|
BINARY
|
||||||
|
BINLOG
|
||||||
|
BIT
|
||||||
|
BLOB
|
||||||
|
BLOCK
|
||||||
|
BOOL
|
||||||
|
BOOLEAN
|
||||||
|
BOTH
|
||||||
|
BTREE
|
||||||
|
BUCKETS
|
||||||
|
BY
|
||||||
|
BYTE
|
||||||
|
C
|
||||||
|
CACHE
|
||||||
|
CALL
|
||||||
|
CASCADE
|
||||||
|
CASCADED
|
||||||
|
CASE
|
||||||
|
CATALOG_NAME
|
||||||
|
CHAIN
|
||||||
|
CHANGE
|
||||||
|
CHANGED
|
||||||
|
CHANNEL
|
||||||
|
CHAR
|
||||||
|
CHARACTER
|
||||||
|
CHARSET
|
||||||
|
CHECK
|
||||||
|
CHECKSUM
|
||||||
|
CIPHER
|
||||||
|
CLASS_ORIGIN
|
||||||
|
CLIENT
|
||||||
|
CLONE
|
||||||
|
CLOSE
|
||||||
|
COALESCE
|
||||||
|
CODE
|
||||||
|
COLLATE
|
||||||
|
COLLATION
|
||||||
|
COLUMN
|
||||||
|
COLUMNS
|
||||||
|
COLUMN_FORMAT
|
||||||
|
COLUMN_NAME
|
||||||
|
COMMENT
|
||||||
|
COMMIT
|
||||||
|
COMMITTED
|
||||||
|
COMPACT
|
||||||
|
COMPLETION
|
||||||
|
COMPONENT
|
||||||
|
COMPRESSED
|
||||||
|
COMPRESSION
|
||||||
|
CONCURRENT
|
||||||
|
CONDITION
|
||||||
|
CONNECTION
|
||||||
|
CONSISTENT
|
||||||
|
CONSTRAINT
|
||||||
|
CONSTRAINT_CATALOG
|
||||||
|
CONSTRAINT_NAME
|
||||||
|
CONSTRAINT_SCHEMA
|
||||||
|
CONTAINS
|
||||||
|
CONTEXT
|
||||||
|
CONTINUE
|
||||||
|
CONVERT
|
||||||
|
CPU
|
||||||
|
CREATE
|
||||||
|
CROSS
|
||||||
|
CUBE
|
||||||
|
CUME_DIST
|
||||||
|
CURRENT
|
||||||
|
CURRENT_DATE
|
||||||
|
CURRENT_TIME
|
||||||
|
CURRENT_TIMESTAMP
|
||||||
|
CURRENT_USER
|
||||||
|
CURSOR
|
||||||
|
CURSOR_NAME
|
||||||
|
D
|
||||||
|
DATA
|
||||||
|
DATABASE
|
||||||
|
DATABASES
|
||||||
|
DATAFILE
|
||||||
|
DATE
|
||||||
|
DATETIME
|
||||||
|
DAY
|
||||||
|
DAY_HOUR
|
||||||
|
DAY_MICROSECOND
|
||||||
|
DAY_MINUTE
|
||||||
|
DAY_SECOND
|
||||||
|
DEALLOCATE
|
||||||
|
DEC
|
||||||
|
DECIMAL
|
||||||
|
DECLARE
|
||||||
|
DEFAULT
|
||||||
|
DEFAULT_AUTH
|
||||||
|
DEFINER
|
||||||
|
DEFINITION
|
||||||
|
DELAYED
|
||||||
|
DELAY_KEY_WRITE
|
||||||
|
DELETE
|
||||||
|
DENSE_RANK
|
||||||
|
DESC
|
||||||
|
DESCRIBE
|
||||||
|
DESCRIPTION
|
||||||
|
DES_KEY_FILE
|
||||||
|
DETERMINISTIC
|
||||||
|
DIAGNOSTICS
|
||||||
|
DIRECTORY
|
||||||
|
DISABLE
|
||||||
|
DISCARD
|
||||||
|
DISK
|
||||||
|
DISTINCT
|
||||||
|
DISTINCTROW
|
||||||
|
DIV
|
||||||
|
DO
|
||||||
|
DOUBLE
|
||||||
|
DROP
|
||||||
|
DUAL
|
||||||
|
DUMPFILE
|
||||||
|
DUPLICATE
|
||||||
|
DYNAMIC
|
||||||
|
E
|
||||||
|
EACH
|
||||||
|
ELSE
|
||||||
|
ELSEIF
|
||||||
|
EMPTY
|
||||||
|
ENABLE
|
||||||
|
ENCLOSED
|
||||||
|
ENCRYPTION
|
||||||
|
END
|
||||||
|
ENDS
|
||||||
|
ENFORCED
|
||||||
|
ENGINE
|
||||||
|
ENGINES
|
||||||
|
ENUM
|
||||||
|
ERROR
|
||||||
|
ERRORS
|
||||||
|
ESCAPE
|
||||||
|
ESCAPED
|
||||||
|
EVENT
|
||||||
|
EVENTS
|
||||||
|
EVERY
|
||||||
|
EXCEPT
|
||||||
|
EXCHANGE
|
||||||
|
EXCLUDE
|
||||||
|
EXECUTE
|
||||||
|
EXISTS
|
||||||
|
EXIT
|
||||||
|
EXPANSION
|
||||||
|
EXPIRE
|
||||||
|
EXPLAIN
|
||||||
|
EXPORT
|
||||||
|
EXTENDED
|
||||||
|
EXTENT_SIZE
|
||||||
|
F
|
||||||
|
FALSE
|
||||||
|
FAST
|
||||||
|
FAULTS
|
||||||
|
FETCH
|
||||||
|
FIELDS
|
||||||
|
FILE
|
||||||
|
FILE_BLOCK_SIZE
|
||||||
|
FILTER
|
||||||
|
FIRST
|
||||||
|
FIRST_VALUE
|
||||||
|
FIXED
|
||||||
|
FLOAT
|
||||||
|
FLUSH
|
||||||
|
FOLLOWING
|
||||||
|
FOLLOWS
|
||||||
|
FOR
|
||||||
|
FORCE
|
||||||
|
FOREIGN
|
||||||
|
FORMAT
|
||||||
|
FOUND
|
||||||
|
FROM
|
||||||
|
FULL
|
||||||
|
FULLTEXT
|
||||||
|
FUNCTION
|
||||||
|
G
|
||||||
|
GENERAL
|
||||||
|
GENERATED
|
||||||
|
GEOMCOLLECTION
|
||||||
|
GEOMETRY
|
||||||
|
GEOMETRYCOLLECTION
|
||||||
|
GET
|
||||||
|
GET_FORMAT
|
||||||
|
GET_MASTER_PUBLIC_KEY
|
||||||
|
GLOBAL
|
||||||
|
GRANT
|
||||||
|
GRANTS
|
||||||
|
GROUP
|
||||||
|
GROUPING
|
||||||
|
GROUPS
|
||||||
|
GROUP_REPLICATION
|
||||||
|
H
|
||||||
|
HANDLER
|
||||||
|
HASH
|
||||||
|
HAVING
|
||||||
|
HELP
|
||||||
|
HIGH_PRIORITY
|
||||||
|
HISTOGRAM
|
||||||
|
HISTORY
|
||||||
|
HOST
|
||||||
|
HOSTS
|
||||||
|
HOUR
|
||||||
|
HOUR_MICROSECOND
|
||||||
|
HOUR_MINUTE
|
||||||
|
HOUR_SECOND
|
||||||
|
I
|
||||||
|
IDENTIFIED
|
||||||
|
IF
|
||||||
|
IGNORE
|
||||||
|
IGNORE_SERVER_IDS
|
||||||
|
IMPORT
|
||||||
|
IN
|
||||||
|
INACTIVE
|
||||||
|
INDEX
|
||||||
|
INDEXES
|
||||||
|
INFILE
|
||||||
|
INITIAL_SIZE
|
||||||
|
INNER
|
||||||
|
INOUT
|
||||||
|
INSENSITIVE
|
||||||
|
INSERT
|
||||||
|
INSERT_METHOD
|
||||||
|
INSTALL
|
||||||
|
INSTANCE
|
||||||
|
INT
|
||||||
|
INTEGER
|
||||||
|
INTERVAL
|
||||||
|
INTO
|
||||||
|
INVISIBLE
|
||||||
|
INVOKER
|
||||||
|
IO
|
||||||
|
IO_AFTER_GTIDS
|
||||||
|
IO_BEFORE_GTIDS
|
||||||
|
IO_THREAD
|
||||||
|
IPC
|
||||||
|
IS
|
||||||
|
ISOLATION
|
||||||
|
ISSUER
|
||||||
|
ITERATE
|
||||||
|
J
|
||||||
|
JOIN
|
||||||
|
JSON
|
||||||
|
JSON_TABLE
|
||||||
|
K
|
||||||
|
KEY
|
||||||
|
KEYS
|
||||||
|
KEY_BLOCK_SIZE
|
||||||
|
KILL
|
||||||
|
L
|
||||||
|
LAG
|
||||||
|
LANGUAGE
|
||||||
|
LAST
|
||||||
|
LAST_VALUE
|
||||||
|
LATERAL
|
||||||
|
LEAD
|
||||||
|
LEADING
|
||||||
|
LEAVE
|
||||||
|
LEAVES
|
||||||
|
LEFT
|
||||||
|
LESS
|
||||||
|
LEVEL
|
||||||
|
LIKE
|
||||||
|
LIMIT
|
||||||
|
LINEAR
|
||||||
|
LINES
|
||||||
|
LINESTRING
|
||||||
|
LIST
|
||||||
|
LOAD
|
||||||
|
LOCAL
|
||||||
|
LOCALTIME
|
||||||
|
LOCALTIMESTAMP
|
||||||
|
LOCK
|
||||||
|
LOCKED
|
||||||
|
LOCKS
|
||||||
|
LOGFILE
|
||||||
|
LOGS
|
||||||
|
LONG
|
||||||
|
LONGBLOB
|
||||||
|
LONGTEXT
|
||||||
|
LOOP
|
||||||
|
LOW_PRIORITY
|
||||||
|
M
|
||||||
|
MASTER
|
||||||
|
MASTER_AUTO_POSITION
|
||||||
|
MASTER_BIND
|
||||||
|
MASTER_COMPRESSION_ALGORITHMS
|
||||||
|
MASTER_CONNECT_RETRY
|
||||||
|
MASTER_DELAY
|
||||||
|
MASTER_HEARTBEAT_PERIOD
|
||||||
|
MASTER_HOST
|
||||||
|
MASTER_LOG_FILE
|
||||||
|
MASTER_LOG_POS
|
||||||
|
MASTER_PASSWORD
|
||||||
|
MASTER_PORT
|
||||||
|
MASTER_PUBLIC_KEY_PATH
|
||||||
|
MASTER_RETRY_COUNT
|
||||||
|
MASTER_SERVER_ID
|
||||||
|
MASTER_SSL
|
||||||
|
MASTER_SSL_CA
|
||||||
|
MASTER_SSL_CAPATH
|
||||||
|
MASTER_SSL_CERT
|
||||||
|
MASTER_SSL_CIPHER
|
||||||
|
MASTER_SSL_CRL
|
||||||
|
MASTER_SSL_CRLPATH
|
||||||
|
MASTER_SSL_KEY
|
||||||
|
MASTER_SSL_VERIFY_SERVER_CERT
|
||||||
|
MASTER_TLS_VERSION
|
||||||
|
MASTER_USER
|
||||||
|
MASTER_ZSTD_COMPRESSION_LEVEL
|
||||||
|
MATCH
|
||||||
|
MAXVALUE
|
||||||
|
MAX_CONNECTIONS_PER_HOUR
|
||||||
|
MAX_QUERIES_PER_HOUR
|
||||||
|
MAX_ROWS
|
||||||
|
MAX_SIZE
|
||||||
|
MAX_UPDATES_PER_HOUR
|
||||||
|
MAX_USER_CONNECTIONS
|
||||||
|
MEDIUM
|
||||||
|
MEDIUMBLOB
|
||||||
|
MEDIUMINT
|
||||||
|
MEDIUMTEXT
|
||||||
|
MEMBER
|
||||||
|
MEMORY
|
||||||
|
MERGE
|
||||||
|
MESSAGE_TEXT
|
||||||
|
MICROSECOND
|
||||||
|
MIDDLEINT
|
||||||
|
MIGRATE
|
||||||
|
MINUTE
|
||||||
|
MINUTE_MICROSECOND
|
||||||
|
MINUTE_SECOND
|
||||||
|
MIN_ROWS
|
||||||
|
MOD
|
||||||
|
MODE
|
||||||
|
MODIFIES
|
||||||
|
MODIFY
|
||||||
|
MONTH
|
||||||
|
MULTILINESTRING
|
||||||
|
MULTIPOINT
|
||||||
|
MULTIPOLYGON
|
||||||
|
MUTEX
|
||||||
|
MYSQL_ERRNO
|
||||||
|
N
|
||||||
|
NAME
|
||||||
|
NAMES
|
||||||
|
NATIONAL
|
||||||
|
NATURAL
|
||||||
|
NCHAR
|
||||||
|
NDB
|
||||||
|
NDBCLUSTER
|
||||||
|
NESTED
|
||||||
|
NETWORK_NAMESPACE
|
||||||
|
NEVER
|
||||||
|
NEW
|
||||||
|
NEXT
|
||||||
|
NO
|
||||||
|
NODEGROUP
|
||||||
|
NONE
|
||||||
|
NOT
|
||||||
|
NOWAIT
|
||||||
|
NO_WAIT
|
||||||
|
NO_WRITE_TO_BINLOG
|
||||||
|
NTH_VALUE
|
||||||
|
NTILE
|
||||||
|
NULL
|
||||||
|
NULLS
|
||||||
|
NUMBER
|
||||||
|
NUMERIC
|
||||||
|
NVARCHAR
|
||||||
|
O
|
||||||
|
OF
|
||||||
|
OFFSET
|
||||||
|
OJ
|
||||||
|
OLD
|
||||||
|
ON
|
||||||
|
ONE
|
||||||
|
ONLY
|
||||||
|
OPEN
|
||||||
|
OPTIMIZE
|
||||||
|
OPTIMIZER_COSTS
|
||||||
|
OPTION
|
||||||
|
OPTIONAL
|
||||||
|
OPTIONALLY
|
||||||
|
OPTIONS
|
||||||
|
OR
|
||||||
|
ORDER
|
||||||
|
ORDINALITY
|
||||||
|
ORGANIZATION
|
||||||
|
OTHERS
|
||||||
|
OUT
|
||||||
|
OUTER
|
||||||
|
OUTFILE
|
||||||
|
OVER
|
||||||
|
OWNER
|
||||||
|
P
|
||||||
|
PACK_KEYS
|
||||||
|
PAGE
|
||||||
|
PARSER
|
||||||
|
PARTIAL
|
||||||
|
PARTITION
|
||||||
|
PARTITIONING
|
||||||
|
PARTITIONS
|
||||||
|
PASSWORD
|
||||||
|
PATH
|
||||||
|
PERCENT_RANK
|
||||||
|
PERSIST
|
||||||
|
PERSIST_ONLY
|
||||||
|
PHASE
|
||||||
|
PLUGIN
|
||||||
|
PLUGINS
|
||||||
|
PLUGIN_DIR
|
||||||
|
POINT
|
||||||
|
POLYGON
|
||||||
|
PORT
|
||||||
|
PRECEDES
|
||||||
|
PRECEDING
|
||||||
|
PRECISION
|
||||||
|
PREPARE
|
||||||
|
PRESERVE
|
||||||
|
PREV
|
||||||
|
PRIMARY
|
||||||
|
PRIVILEGES
|
||||||
|
PROCEDURE
|
||||||
|
PROCESS
|
||||||
|
PROCESSLIST
|
||||||
|
PROFILE
|
||||||
|
PROFILES
|
||||||
|
PROXY
|
||||||
|
PURGE
|
||||||
|
Q
|
||||||
|
QUARTER
|
||||||
|
QUERY
|
||||||
|
QUICK
|
||||||
|
R
|
||||||
|
RANDOM
|
||||||
|
RANGE
|
||||||
|
RANK
|
||||||
|
READ
|
||||||
|
READS
|
||||||
|
READ_ONLY
|
||||||
|
READ_WRITE
|
||||||
|
REAL
|
||||||
|
REBUILD
|
||||||
|
RECOVER
|
||||||
|
RECURSIVE
|
||||||
|
REDOFILE
|
||||||
|
REDO_BUFFER_SIZE
|
||||||
|
REDUNDANT
|
||||||
|
REFERENCE
|
||||||
|
REFERENCES
|
||||||
|
REGEXP
|
||||||
|
RELAY
|
||||||
|
RELAYLOG
|
||||||
|
RELAY_LOG_FILE
|
||||||
|
RELAY_LOG_POS
|
||||||
|
RELAY_THREAD
|
||||||
|
RELEASE
|
||||||
|
RELOAD
|
||||||
|
REMOTE
|
||||||
|
REMOVE
|
||||||
|
RENAME
|
||||||
|
REORGANIZE
|
||||||
|
REPAIR
|
||||||
|
REPEAT
|
||||||
|
REPEATABLE
|
||||||
|
REPLACE
|
||||||
|
REPLICATE_DO_DB
|
||||||
|
REPLICATE_DO_TABLE
|
||||||
|
REPLICATE_IGNORE_DB
|
||||||
|
REPLICATE_IGNORE_TABLE
|
||||||
|
REPLICATE_REWRITE_DB
|
||||||
|
REPLICATE_WILD_DO_TABLE
|
||||||
|
REPLICATE_WILD_IGNORE_TABLE
|
||||||
|
REPLICATION
|
||||||
|
REQUIRE
|
||||||
|
RESET
|
||||||
|
RESIGNAL
|
||||||
|
RESOURCE
|
||||||
|
RESPECT
|
||||||
|
RESTART
|
||||||
|
RESTORE
|
||||||
|
RESTRICT
|
||||||
|
RESUME
|
||||||
|
RETAIN
|
||||||
|
RETURN
|
||||||
|
RETURNED_SQLSTATE
|
||||||
|
RETURNS
|
||||||
|
REUSE
|
||||||
|
REVERSE
|
||||||
|
REVOKE
|
||||||
|
RIGHT
|
||||||
|
RLIKE
|
||||||
|
ROLE
|
||||||
|
ROLLBACK
|
||||||
|
ROLLUP
|
||||||
|
ROTATE
|
||||||
|
ROUTINE
|
||||||
|
ROW
|
||||||
|
ROWS
|
||||||
|
ROW_COUNT
|
||||||
|
ROW_FORMAT
|
||||||
|
ROW_NUMBER
|
||||||
|
RTREE
|
||||||
|
S
|
||||||
|
SAVEPOINT
|
||||||
|
SCHEDULE
|
||||||
|
SCHEMA
|
||||||
|
SCHEMAS
|
||||||
|
SCHEMA_NAME
|
||||||
|
SECOND
|
||||||
|
SECONDARY
|
||||||
|
SECONDARY_ENGINE
|
||||||
|
SECONDARY_LOAD
|
||||||
|
SECONDARY_UNLOAD
|
||||||
|
SECOND_MICROSECOND
|
||||||
|
SECURITY
|
||||||
|
SELECT
|
||||||
|
SENSITIVE
|
||||||
|
SEPARATOR
|
||||||
|
SERIAL
|
||||||
|
SERIALIZABLE
|
||||||
|
SERVER
|
||||||
|
SESSION
|
||||||
|
SET
|
||||||
|
SHARE
|
||||||
|
SHOW
|
||||||
|
SHUTDOWN
|
||||||
|
SIGNAL
|
||||||
|
SIGNED
|
||||||
|
SIMPLE
|
||||||
|
SKIP
|
||||||
|
SLAVE
|
||||||
|
SLOW
|
||||||
|
SMALLINT
|
||||||
|
SNAPSHOT
|
||||||
|
SOCKET
|
||||||
|
SOME
|
||||||
|
SONAME
|
||||||
|
SOUNDS
|
||||||
|
SOURCE
|
||||||
|
SPATIAL
|
||||||
|
SPECIFIC
|
||||||
|
SQL
|
||||||
|
SQLEXCEPTION
|
||||||
|
SQLSTATE
|
||||||
|
SQLWARNING
|
||||||
|
SQL_AFTER_GTIDS
|
||||||
|
SQL_AFTER_MTS_GAPS
|
||||||
|
SQL_BEFORE_GTIDS
|
||||||
|
SQL_BIG_RESULT
|
||||||
|
SQL_BUFFER_RESULT
|
||||||
|
SQL_CACHE
|
||||||
|
SQL_CALC_FOUND_ROWS
|
||||||
|
SQL_NO_CACHE
|
||||||
|
SQL_SMALL_RESULT
|
||||||
|
SQL_THREAD
|
||||||
|
SQL_TSI_DAY
|
||||||
|
SQL_TSI_HOUR
|
||||||
|
SQL_TSI_MINUTE
|
||||||
|
SQL_TSI_MONTH
|
||||||
|
SQL_TSI_QUARTER
|
||||||
|
SQL_TSI_SECOND
|
||||||
|
SQL_TSI_WEEK
|
||||||
|
SQL_TSI_YEAR
|
||||||
|
SRID
|
||||||
|
SSL
|
||||||
|
STACKED
|
||||||
|
START
|
||||||
|
STARTING
|
||||||
|
STARTS
|
||||||
|
STATS_AUTO_RECALC
|
||||||
|
STATS_PERSISTENT
|
||||||
|
STATS_SAMPLE_PAGES
|
||||||
|
STATUS
|
||||||
|
STOP
|
||||||
|
STORAGE
|
||||||
|
STORED
|
||||||
|
STRAIGHT_JOIN
|
||||||
|
STRING
|
||||||
|
SUBCLASS_ORIGIN
|
||||||
|
SUBJECT
|
||||||
|
SUBPARTITION
|
||||||
|
SUBPARTITIONS
|
||||||
|
SUPER
|
||||||
|
SUSPEND
|
||||||
|
SWAPS
|
||||||
|
SWITCHES
|
||||||
|
SYSTEM
|
||||||
|
T
|
||||||
|
TABLE
|
||||||
|
TABLES
|
||||||
|
TABLESPACE
|
||||||
|
TABLE_CHECKSUM
|
||||||
|
TABLE_NAME
|
||||||
|
TEMPORARY
|
||||||
|
TEMPTABLE
|
||||||
|
TERMINATED
|
||||||
|
TEXT
|
||||||
|
THAN
|
||||||
|
THEN
|
||||||
|
THREAD_PRIORITY
|
||||||
|
TIES
|
||||||
|
TIME
|
||||||
|
TIMESTAMP
|
||||||
|
TIMESTAMPADD
|
||||||
|
TIMESTAMPDIFF
|
||||||
|
TINYBLOB
|
||||||
|
TINYINT
|
||||||
|
TINYTEXT
|
||||||
|
TO
|
||||||
|
TRAILING
|
||||||
|
TRANSACTION
|
||||||
|
TRIGGER
|
||||||
|
TRIGGERS
|
||||||
|
TRUE
|
||||||
|
TRUNCATE
|
||||||
|
TYPE
|
||||||
|
TYPES
|
||||||
|
U
|
||||||
|
UNBOUNDED
|
||||||
|
UNCOMMITTED
|
||||||
|
UNDEFINED
|
||||||
|
UNDO
|
||||||
|
UNDOFILE
|
||||||
|
UNDO_BUFFER_SIZE
|
||||||
|
UNICODE
|
||||||
|
UNINSTALL
|
||||||
|
UNION
|
||||||
|
UNIQUE
|
||||||
|
UNKNOWN
|
||||||
|
UNLOCK
|
||||||
|
UNSIGNED
|
||||||
|
UNTIL
|
||||||
|
UPDATE
|
||||||
|
UPGRADE
|
||||||
|
USAGE
|
||||||
|
USE
|
||||||
|
USER
|
||||||
|
USER_RESOURCES
|
||||||
|
USE_FRM
|
||||||
|
USING
|
||||||
|
UTC_DATE
|
||||||
|
UTC_TIME
|
||||||
|
UTC_TIMESTAMP
|
||||||
|
V
|
||||||
|
VALIDATION
|
||||||
|
VALUE
|
||||||
|
VALUES
|
||||||
|
VARBINARY
|
||||||
|
VARCHAR
|
||||||
|
VARCHARACTER
|
||||||
|
VARIABLES
|
||||||
|
VARYING
|
||||||
|
VCPU
|
||||||
|
VIEW
|
||||||
|
VIRTUAL
|
||||||
|
VISIBLE
|
||||||
|
W
|
||||||
|
WAIT
|
||||||
|
WARNINGS
|
||||||
|
WEEK
|
||||||
|
WEIGHT_STRING
|
||||||
|
WHEN
|
||||||
|
WHERE
|
||||||
|
WHILE
|
||||||
|
WINDOW
|
||||||
|
WITH
|
||||||
|
WITHOUT
|
||||||
|
WORK
|
||||||
|
WRAPPER
|
||||||
|
WRITE
|
||||||
|
X
|
||||||
|
XA
|
||||||
|
XID
|
||||||
|
XML
|
||||||
|
XOR
|
||||||
|
Y
|
||||||
|
YEAR
|
||||||
|
YEAR_MONTH
|
||||||
|
Z
|
||||||
|
ZEROFILL
|
||||||
|
A
|
||||||
|
ACTIVE
|
||||||
|
ADMIN
|
||||||
|
ARRAY
|
||||||
|
B
|
||||||
|
BUCKETS
|
||||||
|
C
|
||||||
|
CLONE
|
||||||
|
COMPONENT
|
||||||
|
CUME_DIST
|
||||||
|
D
|
||||||
|
DEFINITION
|
||||||
|
DENSE_RANK
|
||||||
|
DESCRIPTION
|
||||||
|
E
|
||||||
|
EMPTY
|
||||||
|
ENFORCED
|
||||||
|
EXCEPT
|
||||||
|
EXCLUDE
|
||||||
|
F
|
||||||
|
FIRST_VALUE
|
||||||
|
FOLLOWING
|
||||||
|
G
|
||||||
|
GEOMCOLLECTION
|
||||||
|
GET_MASTER_PUBLIC_KEY
|
||||||
|
GROUPING
|
||||||
|
GROUPS
|
||||||
|
H
|
||||||
|
HISTOGRAM
|
||||||
|
HISTORY
|
||||||
|
I
|
||||||
|
INACTIVE
|
||||||
|
INVISIBLE
|
||||||
|
J
|
||||||
|
JSON_TABLE
|
||||||
|
L
|
||||||
|
LAG
|
||||||
|
LAST_VALUE
|
||||||
|
LATERAL
|
||||||
|
LEAD
|
||||||
|
LOCKED
|
||||||
|
M
|
||||||
|
MASTER_COMPRESSION_ALGORITHMS
|
||||||
|
MASTER_PUBLIC_KEY_PATH
|
||||||
|
MASTER_ZSTD_COMPRESSION_LEVEL
|
||||||
|
MEMBER
|
||||||
|
N
|
||||||
|
NESTED
|
||||||
|
NETWORK_NAMESPACE
|
||||||
|
NOWAIT
|
||||||
|
NTH_VALUE
|
||||||
|
NTILE
|
||||||
|
NULLS
|
||||||
|
O
|
||||||
|
OF
|
||||||
|
OJ
|
||||||
|
OLD
|
||||||
|
OPTIONAL
|
||||||
|
ORDINALITY
|
||||||
|
ORGANIZATION
|
||||||
|
OTHERS
|
||||||
|
OVER
|
||||||
|
P
|
||||||
|
PATH
|
||||||
|
PERCENT_RANK
|
||||||
|
PERSIST
|
||||||
|
PERSIST_ONLY
|
||||||
|
PRECEDING
|
||||||
|
PROCESS
|
||||||
|
R
|
||||||
|
RANDOM
|
||||||
|
RANK
|
||||||
|
RECURSIVE
|
||||||
|
REFERENCE
|
||||||
|
RESOURCE
|
||||||
|
RESPECT
|
||||||
|
RESTART
|
||||||
|
RETAIN
|
||||||
|
REUSE
|
||||||
|
ROLE
|
||||||
|
ROW_NUMBER
|
||||||
|
S
|
||||||
|
SECONDARY
|
||||||
|
SECONDARY_ENGINE
|
||||||
|
SECONDARY_LOAD
|
||||||
|
SECONDARY_UNLOAD
|
||||||
|
SKIP
|
||||||
|
SRID
|
||||||
|
SYSTEM
|
||||||
|
T
|
||||||
|
THREAD_PRIORITY
|
||||||
|
TIES
|
||||||
|
U
|
||||||
|
UNBOUNDED
|
||||||
|
V
|
||||||
|
VCPU
|
||||||
|
VISIBLE
|
||||||
|
W
|
||||||
|
WINDOW
|
||||||
|
ANALYSE
|
||||||
|
DES_KEY_FILE
|
||||||
|
PARSE_GCOL_EXPR
|
||||||
|
REDOFILE
|
||||||
|
SQL_CACHE
|
|
@ -316,6 +316,12 @@
|
||||||
request binary data in Attachments as raw binary content instead of
|
request binary data in Attachments as raw binary content instead of
|
||||||
as base 64 encoded content.
|
as base 64 encoded content.
|
||||||
</action>
|
</action>
|
||||||
|
<action type="change">
|
||||||
|
A few columns named 'CODE' in the JPA terminology services tables have been
|
||||||
|
renamed to 'CODEVAL' to avoid any possibility of conflicting with reserved
|
||||||
|
words in MySQL. The database migrator tool has been updated to handle this
|
||||||
|
change.
|
||||||
|
</action>
|
||||||
</release>
|
</release>
|
||||||
<release version="3.8.0" date="2019-05-30" description="Hippo">
|
<release version="3.8.0" date="2019-05-30" description="Hippo">
|
||||||
<action type="fix">
|
<action type="fix">
|
||||||
|
|
Loading…
Reference in New Issue