DBZ-2726 extend data separator and time separator
This commit is contained in:
parent
7e44a3068a
commit
78c061a86d
@ -273,34 +273,31 @@ private String cleanTimestamp(String s) {
|
||||
|
||||
s = s.trim();
|
||||
|
||||
// clean first dash
|
||||
s = replaceFirstNonNumericSubstring(s, 0, '-');
|
||||
// clean second dash
|
||||
s = replaceFirstNonNumericSubstring(s, s.indexOf('-') + 1, '-');
|
||||
// clean dividing space
|
||||
s = replaceFirstNonNumericSubstring(s, s.indexOf('-', s.indexOf('-') + 1) + 1, ' ');
|
||||
if (s.indexOf(' ') != -1) {
|
||||
// clean first colon
|
||||
s = replaceFirstNonNumericSubstring(s, s.indexOf(' ') + 1, ':');
|
||||
if (s.indexOf(':') != -1) {
|
||||
// clean second colon
|
||||
s = replaceFirstNonNumericSubstring(s, s.indexOf(':') + 1, ':');
|
||||
}
|
||||
}
|
||||
|
||||
final int MAX_MONTH = 12;
|
||||
final int MAX_DAY = 31;
|
||||
|
||||
// Parse the date
|
||||
int firstDash = s.indexOf('-');
|
||||
int secondDash = s.indexOf('-', firstDash + 1);
|
||||
|
||||
int dividingStart = -1;
|
||||
int dividingEnd = -1;
|
||||
boolean hasDividing = false;
|
||||
for (int i = secondDash + 1; i < s.length(); i++) {
|
||||
if (!Character.isDigit(s.charAt(i))) {
|
||||
dividingStart = i;
|
||||
hasDividing = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hasDividing) {
|
||||
for (int i = dividingStart; i < s.length(); i++) {
|
||||
if (Character.isDigit(s.charAt(i))) {
|
||||
break;
|
||||
}
|
||||
dividingEnd = i;
|
||||
}
|
||||
}
|
||||
int dividingSpace = s.indexOf(' ');
|
||||
|
||||
// Parse the time
|
||||
int firstColon = s.indexOf(':', dividingEnd + 1);
|
||||
int firstColon = s.indexOf(':', dividingSpace + 1);
|
||||
int secondColon = s.indexOf(':', firstColon + 1);
|
||||
int period = s.indexOf('.', secondColon + 1);
|
||||
|
||||
@ -317,8 +314,8 @@ private String cleanTimestamp(String s) {
|
||||
if (firstDash > 0 && secondDash > firstDash) {
|
||||
year = Integer.parseInt(s.substring(0, firstDash));
|
||||
month = Integer.parseInt(s.substring(firstDash + 1, secondDash));
|
||||
if (hasDividing) {
|
||||
day = Integer.parseInt(s.substring(secondDash + 1, dividingStart));
|
||||
if (dividingSpace != -1) {
|
||||
day = Integer.parseInt(s.substring(secondDash + 1, dividingSpace));
|
||||
}
|
||||
else {
|
||||
day = Integer.parseInt(s.substring(secondDash + 1, len));
|
||||
@ -333,12 +330,12 @@ private String cleanTimestamp(String s) {
|
||||
}
|
||||
|
||||
// Get the time. Hour, minute, second and colons are all optional
|
||||
if (hasDividing && dividingEnd < len - 1) {
|
||||
if (dividingSpace != -1 && dividingSpace < len - 1) {
|
||||
if (firstColon == -1) {
|
||||
hour = Integer.parseInt(s.substring(dividingEnd + 1, len));
|
||||
hour = Integer.parseInt(s.substring(dividingSpace + 1, len));
|
||||
}
|
||||
else {
|
||||
hour = Integer.parseInt(s.substring(dividingEnd + 1, firstColon));
|
||||
hour = Integer.parseInt(s.substring(dividingSpace + 1, firstColon));
|
||||
if (firstColon < len - 1) {
|
||||
if (secondColon == -1) {
|
||||
minute = Integer.parseInt(s.substring(firstColon + 1, len));
|
||||
@ -369,6 +366,23 @@ private String cleanTimestamp(String s) {
|
||||
return cleanedTimestamp.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the first non-numeric substring
|
||||
*
|
||||
* @param s the original string
|
||||
* @param startIndex the beginning index, inclusive
|
||||
* @param c the new character
|
||||
* @return
|
||||
*/
|
||||
private String replaceFirstNonNumericSubstring(String s, int startIndex, char c) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(s.substring(0, startIndex));
|
||||
|
||||
String rest = s.substring(startIndex);
|
||||
sb.append(rest.replaceFirst("[^\\d]+", Character.toString(c)));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public ColumnEditor setColumnDefaultValue(ColumnEditor columnEditor) {
|
||||
final Column column = columnEditor.create();
|
||||
|
||||
|
@ -2559,14 +2559,22 @@ public void shouldParseTimestampDefaultValue() {
|
||||
"ts_col08 TIMESTAMP DEFAULT '2020-01-02 03:04'," +
|
||||
"ts_col09 TIMESTAMP DEFAULT '2020-01-02 03:004'," +
|
||||
"ts_col10 TIMESTAMP DEFAULT '2020-01-02 03:04:05'," +
|
||||
"ts_col11 TIMESTAMP DEFAULT '2020-01-02 03:04:05.6'," +
|
||||
"ts_col11 TIMESTAMP(6) DEFAULT '2020-01-02 03:04:05.123456'," +
|
||||
"ts_col12 TIMESTAMP DEFAULT '2020-01-02 03:04:05.'," +
|
||||
"ts_col13 TIMESTAMP DEFAULT '2020-01-02:03:04:05'," +
|
||||
"ts_col14 TIMESTAMP DEFAULT '2020-01-02-03:04:05'," +
|
||||
"ts_col15 TIMESTAMP DEFAULT '2020-01-02--03:04:05'," +
|
||||
"ts_col16 TIMESTAMP DEFAULT '2020-01-02--03:004:0005'," +
|
||||
"ts_col17 TIMESTAMP DEFAULT '02020-0001-00002--03:004:0005'," +
|
||||
"ts_col18 TIMESTAMP DEFAULT '1970-01-01:00:00:001');";
|
||||
"ts_col18 TIMESTAMP DEFAULT '1970-01-01:00:00:001'," +
|
||||
"ts_col19 TIMESTAMP DEFAULT '2020-01-02 03!@#.$:{}()[]^04!@#.$:{}()[]^05'," +
|
||||
"ts_col20 TIMESTAMP DEFAULT '2020-01-02 03::04'," +
|
||||
"ts_col21 TIMESTAMP DEFAULT '2020-01-02 03::04.'," +
|
||||
"ts_col22 TIMESTAMP DEFAULT '2020-01-02 03.04'," +
|
||||
"ts_col23 TIMESTAMP DEFAULT '2020#01#02 03.04'," +
|
||||
"ts_col24 TIMESTAMP DEFAULT '2020##01--02^03.04'," +
|
||||
"ts_col25 TIMESTAMP DEFAULT '2020-01-02 03::04'" +
|
||||
");";
|
||||
parser.parse(ddl, tables);
|
||||
|
||||
Table table = tables.forTable(new TableId(null, null, "my_table"));
|
||||
@ -2591,7 +2599,7 @@ public void shouldParseTimestampDefaultValue() {
|
||||
assertThat(table.columnWithName("ts_col10").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col10").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:05"));
|
||||
assertThat(table.columnWithName("ts_col11").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col11").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:05.6"));
|
||||
assertThat(table.columnWithName("ts_col11").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:05.123456"));
|
||||
assertThat(table.columnWithName("ts_col12").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col12").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:05"));
|
||||
assertThat(table.columnWithName("ts_col13").hasDefaultValue()).isEqualTo(true);
|
||||
@ -2606,6 +2614,20 @@ public void shouldParseTimestampDefaultValue() {
|
||||
assertThat(table.columnWithName("ts_col17").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:05"));
|
||||
assertThat(table.columnWithName("ts_col18").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col18").defaultValue()).isEqualTo(toIsoString("1970-01-01 00:00:01"));
|
||||
assertThat(table.columnWithName("ts_col19").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col19").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:05"));
|
||||
assertThat(table.columnWithName("ts_col20").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col20").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:00"));
|
||||
assertThat(table.columnWithName("ts_col21").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col21").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:00"));
|
||||
assertThat(table.columnWithName("ts_col22").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col22").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:00"));
|
||||
assertThat(table.columnWithName("ts_col23").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col23").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:00"));
|
||||
assertThat(table.columnWithName("ts_col24").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col24").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:00"));
|
||||
assertThat(table.columnWithName("ts_col25").hasDefaultValue()).isEqualTo(true);
|
||||
assertThat(table.columnWithName("ts_col25").defaultValue()).isEqualTo(toIsoString("2020-01-02 03:04:00"));
|
||||
|
||||
final String alter1 = "ALTER TABLE my_table ADD ts_col TIMESTAMP DEFAULT '2020-01-02';";
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user