Skip to content

Commit eba1718

Browse files
committed
CDM-34 further tidy-up, moving ColumnsKeysTypes to its own static class
1 parent c8615ad commit eba1718

14 files changed

+555
-628
lines changed

src/main/java/datastax/cdm/cql/statement/AbstractTargetUpsertStatement.java

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import datastax.cdm.data.EnhancedPK;
77
import datastax.cdm.data.Record;
88
import datastax.cdm.feature.*;
9+
import datastax.cdm.properties.ColumnsKeysTypes;
910
import datastax.cdm.properties.KnownProperties;
1011
import datastax.cdm.properties.PropertyHelper;
1112

@@ -46,7 +47,7 @@ public AbstractTargetUpsertStatement(PropertyHelper propertyHelper, CqlHelper cq
4647
explodeMapFeature = cqlHelper.getFeature(Featureset.EXPLODE_MAP);
4748

4849
setTTLAndWriteTimeNames();
49-
setAndAlignNamesAndTypes();
50+
setNamesAndTypes();
5051
setConstantColumns();
5152
setExplodeMapIndexes();
5253
setCounterIndexes();
@@ -93,46 +94,11 @@ protected String usingTTLTimestamp() {
9394
return sb.toString();
9495
}
9596

96-
/**
97-
* The expectation is that the target and origin column lists are in the same order, and of the
98-
* same types. Column names may or may not be aligned. However, some features (such as ExplodeMap)
99-
* may change the target columns.
100-
*/
101-
private void setAndAlignNamesAndTypes() {
102-
103-
originColumnNames.addAll(propertyHelper.getOriginColumnNames());
104-
originColumnTypes.addAll(propertyHelper.getOriginColumnTypes());
105-
targetColumnNames.addAll(propertyHelper.getTargetColumnNames());
106-
targetColumnTypes.addAll(propertyHelper.getTargetColumnTypes());
107-
108-
// is this because of the explode map feature? in which case, we will insert a extra column
109-
if (originColumnNames.size() != targetColumnNames.size() && FeatureFactory.isEnabled(explodeMapFeature)) {
110-
String mapColumnName = explodeMapFeature.getString(ExplodeMap.Property.MAP_COLUMN_NAME);
111-
if (!originColumnNames.contains(mapColumnName)) {
112-
throw new RuntimeException(KnownProperties.ORIGIN_COLUMN_NAMES+ " does not contain configured map column name: " + ExplodeMap.Property.MAP_COLUMN_NAME +": "+ mapColumnName);
113-
}
114-
115-
String mapKeyColumnName = explodeMapFeature.getString(ExplodeMap.Property.KEY_COLUMN_NAME);
116-
if (!targetColumnNames.contains(mapKeyColumnName)) {
117-
throw new RuntimeException(KnownProperties.TARGET_COLUMN_NAMES+ " does not contain configured map key column name: " + ExplodeMap.Property.KEY_COLUMN_NAME + ": " + mapKeyColumnName);
118-
}
119-
120-
String mapValueColumnName = explodeMapFeature.getString(ExplodeMap.Property.VALUE_COLUMN_NAME);
121-
if (!targetColumnNames.contains(mapValueColumnName)) {
122-
throw new RuntimeException(KnownProperties.TARGET_COLUMN_NAMES+ " does not contain configured map value column name: " + ExplodeMap.Property.VALUE_COLUMN_NAME + ": "+ mapValueColumnName);
123-
}
124-
125-
// On the origin column list, we expect the column next to the origin map column to be the empty string
126-
int mapColumnIndex = originColumnNames.indexOf(mapColumnName);
127-
if (originColumnNames.size() <= mapColumnIndex+1) {
128-
originColumnNames.add("");
129-
originColumnTypes.add(new MigrateDataType());
130-
}
131-
else if (!originColumnNames.get(mapColumnIndex+1).equals("")) {
132-
originColumnNames.add(mapColumnIndex+1, "");
133-
originColumnTypes.add(mapColumnIndex+1, new MigrateDataType());
134-
}
135-
}
97+
private void setNamesAndTypes() {
98+
originColumnNames.addAll(ColumnsKeysTypes.getOriginColumnNames(propertyHelper));
99+
originColumnTypes.addAll(ColumnsKeysTypes.getOriginColumnTypes(propertyHelper));
100+
targetColumnNames.addAll(ColumnsKeysTypes.getTargetColumnNames(propertyHelper));
101+
targetColumnTypes.addAll(ColumnsKeysTypes.getTargetColumnTypes(propertyHelper));
136102
}
137103

138104
private void setConstantColumns() {

src/main/java/datastax/cdm/cql/statement/OriginSelectByPKStatement.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import datastax.cdm.data.EnhancedPK;
99
import datastax.cdm.data.PKFactory;
1010
import datastax.cdm.data.Record;
11+
import datastax.cdm.properties.ColumnsKeysTypes;
1112
import datastax.cdm.properties.PropertyHelper;
1213
import org.slf4j.Logger;
1314
import org.slf4j.LoggerFactory;
@@ -20,7 +21,7 @@ public class OriginSelectByPKStatement extends AbstractOriginSelectStatement {
2021

2122
public OriginSelectByPKStatement(PropertyHelper propertyHelper, CqlHelper cqlHelper) {
2223
super(propertyHelper, cqlHelper);
23-
originPKTypes = propertyHelper.getOriginPKTypes();
24+
originPKTypes = ColumnsKeysTypes.getOriginPKTypes(propertyHelper);
2425
}
2526

2627
public Record getRecord(EnhancedPK pk) {

src/main/java/datastax/cdm/cql/statement/OriginSelectByPartitionRangeStatement.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import datastax.cdm.cql.CqlHelper;
66
import datastax.cdm.feature.Featureset;
77
import datastax.cdm.feature.OriginFilterCondition;
8+
import datastax.cdm.properties.ColumnsKeysTypes;
89
import datastax.cdm.properties.KnownProperties;
910
import datastax.cdm.properties.PropertyHelper;
1011
import org.slf4j.Logger;
@@ -46,7 +47,7 @@ public BoundStatement bind(Object... binds) {
4647

4748
@Override
4849
protected String whereBinds() {
49-
String partitionKey = PropertyHelper.asString(propertyHelper.getOriginPartitionKeyNames(), KnownProperties.PropertyType.STRING_LIST).trim();
50+
String partitionKey = PropertyHelper.asString(ColumnsKeysTypes.getOriginPartitionKeyNames(propertyHelper), KnownProperties.PropertyType.STRING_LIST).trim();
5051
return "TOKEN(" + partitionKey + ") >= ? AND TOKEN(" + partitionKey + ") <= ?";
5152
}
5253

src/main/java/datastax/cdm/cql/statement/TargetSelectByPKStatement.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import datastax.cdm.data.EnhancedPK;
1010
import datastax.cdm.data.PKFactory;
1111
import datastax.cdm.data.Record;
12+
import datastax.cdm.properties.ColumnsKeysTypes;
1213
import datastax.cdm.properties.KnownProperties;
1314
import datastax.cdm.properties.PropertyHelper;
1415
import org.slf4j.Logger;
@@ -61,7 +62,7 @@ private BoundStatement bind(EnhancedPK pk) {
6162
}
6263

6364
private String buildStatement() {
64-
return "SELECT " + PropertyHelper.asString(propertyHelper.getTargetColumnNames(), KnownProperties.PropertyType.STRING_LIST)
65+
return "SELECT " + PropertyHelper.asString(ColumnsKeysTypes.getTargetColumnNames(propertyHelper), KnownProperties.PropertyType.STRING_LIST)
6566
+ " FROM " + propertyHelper.getString(KnownProperties.TARGET_KEYSPACE_TABLE)
6667
+ " WHERE " + cqlHelper.getPKFactory().getWhereClause(PKFactory.Side.TARGET);
6768
}

src/main/java/datastax/cdm/cql/statement/TargetUpdateStatement.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
import datastax.cdm.job.MigrateDataType;
77
import datastax.cdm.cql.CqlHelper;
88
import datastax.cdm.data.PKFactory;
9-
import datastax.cdm.feature.ExplodeMap;
10-
import datastax.cdm.feature.FeatureFactory;
9+
import datastax.cdm.properties.ColumnsKeysTypes;
1110
import datastax.cdm.properties.KnownProperties;
1211
import datastax.cdm.properties.PropertyHelper;
1312
import org.slf4j.Logger;
@@ -26,7 +25,7 @@ public class TargetUpdateStatement extends AbstractTargetUpsertStatement {
2625
public TargetUpdateStatement(PropertyHelper propertyHelper, CqlHelper cqlHelper) {
2726
super(propertyHelper, cqlHelper);
2827
this.columnIndexesToBind = new ArrayList<>();
29-
setExplodeMapColumnIndexesToBind();
28+
setColumnIndexesToBind();
3029

3130
List<String> ttlColumnNames = propertyHelper.getStringList(KnownProperties.ORIGIN_TTL_INDEXES);
3231
if (null != ttlColumnNames && !ttlColumnNames.isEmpty()) usingTTL = true;
@@ -101,10 +100,10 @@ protected String buildStatement() {
101100
return targetUpdateCQL.toString();
102101
}
103102

104-
private void setExplodeMapColumnIndexesToBind() {
103+
private void setColumnIndexesToBind() {
105104
int currentColumn = 0;
106105
for (String key : targetColumnNames) {
107-
if (!propertyHelper.getTargetPKNames().contains(key)) {
106+
if (!ColumnsKeysTypes.getTargetPKNames(propertyHelper).contains(key)) {
108107
columnIndexesToBind.add(currentColumn);
109108
}
110109
currentColumn++;

src/main/java/datastax/cdm/data/PKFactory.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import datastax.cdm.feature.ConstantColumns;
88
import datastax.cdm.feature.ExplodeMap;
99
import datastax.cdm.cql.statement.OriginSelectByPartitionRangeStatement;
10+
import datastax.cdm.properties.ColumnsKeysTypes;
1011
import datastax.cdm.properties.KnownProperties;
1112
import datastax.cdm.properties.PropertyHelper;
1213
import datastax.cdm.feature.Feature;
@@ -66,9 +67,9 @@ public PKFactory(PropertyHelper propertyHelper, CqlHelper cqlHelper) {
6667

6768
setPKNamesAndTypes(propertyHelper);
6869

69-
this.targetColumnTypes = propertyHelper.getTargetColumnTypes();
70-
this.originColumnTypes = propertyHelper.getOriginColumnTypes();
71-
this.targetToOriginColumnIndexes = propertyHelper.getTargetToOriginColumnIndexes();
70+
this.targetColumnTypes = ColumnsKeysTypes.getTargetColumnTypes(propertyHelper);
71+
this.originColumnTypes = ColumnsKeysTypes.getOriginColumnTypes(propertyHelper);
72+
this.targetToOriginColumnIndexes = ColumnsKeysTypes.getTargetToOriginColumnIndexes(propertyHelper);
7273

7374
this.targetPKLookupMethods = new ArrayList<>(targetPKNames.size());
7475
this.targetDefaultValues = new ArrayList<>(targetPKNames.size());
@@ -283,14 +284,14 @@ private List<Object> getTargetPKValuesFromOriginColumnLookupMethod(Row originRow
283284
}
284285

285286
private void setPKNamesAndTypes(PropertyHelper propertyHelper) {
286-
targetPKNames.addAll(propertyHelper.getTargetPKNames());
287-
targetPKTypes.addAll(propertyHelper.getTargetPKTypes());
287+
targetPKNames.addAll(ColumnsKeysTypes.getTargetPKNames(propertyHelper));
288+
targetPKTypes.addAll(ColumnsKeysTypes.getTargetPKTypes(propertyHelper));
288289
if (targetPKNames.isEmpty() || targetPKTypes.size() != targetPKNames.size()) {
289290
throw new RuntimeException("Target primary key and/or types is not defined or not valid, see "+KnownProperties.TARGET_PRIMARY_KEY+" and "+KnownProperties.TARGET_PRIMARY_KEY_TYPES + "; feature configuration may also be to blame.");
290291
}
291292

292-
originPKNames.addAll(propertyHelper.getOriginPKNames());
293-
originPKTypes.addAll(propertyHelper.getOriginPKTypes());
293+
originPKNames.addAll(ColumnsKeysTypes.getOriginPKNames(propertyHelper));
294+
originPKTypes.addAll(ColumnsKeysTypes.getOriginPKTypes(propertyHelper));
294295
if (originPKNames.isEmpty() || originPKNames.size() != originPKTypes.size()) {
295296
throw new RuntimeException("Origin primary key and/or types is not defined or not valid; these are internally managed values so this is likely a bug. Please report it.");
296297
}
@@ -304,8 +305,8 @@ private Map<Object,Object> getExplodeMap(Row originRow) {
304305
}
305306

306307
private List<Integer> targetToOriginPKIndexes(PropertyHelper propertyHelper) {
307-
List<Integer> targetToColumnIndexes = propertyHelper.getTargetToOriginColumnIndexes();
308-
List<String> targetColumnNames = propertyHelper.getTargetColumnNames();
308+
List<Integer> targetToColumnIndexes = ColumnsKeysTypes.getTargetToOriginColumnIndexes(propertyHelper);
309+
List<String> targetColumnNames = ColumnsKeysTypes.getTargetColumnNames(propertyHelper);
309310
List<Integer> rtn = new ArrayList<>();
310311
for (int i = 0; i< targetPKNames.size(); i++) {
311312
if (targetPKLookupMethods.get(i) != LookupMethod.ORIGIN_COLUMN) {
@@ -321,8 +322,8 @@ private List<Integer> targetToOriginPKIndexes(PropertyHelper propertyHelper) {
321322

322323
// This fills the PKLookupMethods lists with either ORIGIN_COLUMN or null.
323324
private void setOriginColumnLookupMethod(PropertyHelper propertyHelper) {
324-
List<String> originColumnNames = propertyHelper.getOriginColumnNames();
325-
List<String> targetColumnNames = propertyHelper.getTargetColumnNames();
325+
List<String> originColumnNames = ColumnsKeysTypes.getOriginColumnNames(propertyHelper);
326+
List<String> targetColumnNames = ColumnsKeysTypes.getTargetColumnNames(propertyHelper);
326327
if (null==originColumnNames || originColumnNames.isEmpty() || null==targetColumnNames || targetColumnNames.isEmpty())
327328
throw new RuntimeException("Origin and/or column names are not set, see "+KnownProperties.ORIGIN_COLUMN_NAMES+" and "+KnownProperties.TARGET_COLUMN_NAMES);
328329

src/main/java/datastax/cdm/feature/ConstantColumns.java

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,12 @@ public enum Property {
2525

2626
@Override
2727
public boolean initialize(PropertyHelper propertyHelper) {
28-
List<String> columnNames = propertyHelper.getStringList(KnownProperties.CONSTANT_COLUMN_NAMES);
29-
putStringList(Property.COLUMN_NAMES, columnNames);
30-
31-
List<MigrateDataType> columnTypes = propertyHelper.getMigrationTypeList(KnownProperties.CONSTANT_COLUMN_TYPES);
32-
putMigrateDataTypeList(Property.COLUMN_TYPES, columnTypes);
28+
List<String> columnNames = getConstantColumnNames(propertyHelper);
3329

34-
String splitRegex = propertyHelper.getString(KnownProperties.CONSTANT_COLUMN_SPLIT_REGEX);
35-
putString(Property.SPLIT_REGEX, splitRegex);
36-
37-
List<String> columnValues = columnValues(
38-
propertyHelper.getString(KnownProperties.CONSTANT_COLUMN_VALUES),
39-
splitRegex);
40-
putStringList(Property.COLUMN_VALUES, columnValues);
30+
putStringList(Property.COLUMN_NAMES, columnNames);
31+
putMigrateDataTypeList(Property.COLUMN_TYPES, getConstantColumnTypes(propertyHelper));
32+
putString(Property.SPLIT_REGEX, getSplitRegex(propertyHelper));
33+
putStringList(Property.COLUMN_VALUES, getConstantColumnValues(propertyHelper));
4134

4235
valid = isValid();
4336
isInitialized = true;
@@ -52,20 +45,45 @@ public PropertyHelper alterProperties(PropertyHelper helper, PKFactory pkFactory
5245
return helper;
5346
}
5447

55-
private List<String> columnValues(String columnValueString, String regexString) {
48+
public static List<String> getConstantColumnNames(PropertyHelper propertyHelper) {
49+
return propertyHelper.getStringList(KnownProperties.CONSTANT_COLUMN_NAMES);
50+
}
51+
52+
public static List<MigrateDataType> getConstantColumnTypes(PropertyHelper propertyHelper) {
53+
return propertyHelper.getMigrationTypeList(KnownProperties.CONSTANT_COLUMN_TYPES);
54+
}
55+
56+
public static String getSplitRegex(PropertyHelper propertyHelper) {
57+
return propertyHelper.getString(KnownProperties.CONSTANT_COLUMN_SPLIT_REGEX);
58+
}
59+
60+
public static List<String> getConstantColumnValues(PropertyHelper propertyHelper) {
61+
String columnValueString = propertyHelper.getString(KnownProperties.CONSTANT_COLUMN_VALUES);
62+
String regexString = getSplitRegex(propertyHelper);
63+
5664
List<String> columnValues = new ArrayList<>();
5765
if (null!=columnValueString && !columnValueString.isEmpty()) {
5866
if (null==regexString || regexString.isEmpty()) {
59-
logger.error("Constant column values are specified [{}], but no split regex is provided in property {}"
60-
, columnValueString
61-
, KnownProperties.CONSTANT_COLUMN_SPLIT_REGEX);
67+
throw new RuntimeException("Constant column values are specified [" + columnValueString + "], but no split regex is provided in property " + KnownProperties.CONSTANT_COLUMN_SPLIT_REGEX);
6268
} else {
6369
columnValues = Arrays.asList(columnValueString.split(regexString));
6470
}
6571
}
72+
6673
return columnValues;
6774
}
6875

76+
public static MigrateDataType getConstantColumnType(PropertyHelper helper, String columnName) {
77+
List<String> constantColumnNames = getConstantColumnNames(helper);
78+
List<MigrateDataType> constantColumnTypes = getConstantColumnTypes(helper);
79+
if (null!=constantColumnNames && null!=constantColumnTypes && constantColumnNames.size() == constantColumnTypes.size()) {
80+
int index = constantColumnNames.indexOf(columnName);
81+
if (index >= 0)
82+
return constantColumnTypes.get(index);
83+
}
84+
return null;
85+
}
86+
6987
private boolean isValid() {
7088
List<String> columnNames = getRawStringList(Property.COLUMN_NAMES);
7189
List<MigrateDataType> columnTypes = getRawMigrateDataTypeList(Property.COLUMN_TYPES);

0 commit comments

Comments
 (0)