Skip to content

Commit 0c857ef

Browse files
committed
Updated to add a sort key for SortRow steps. issue #20
1 parent 39bc4bb commit 0c857ef

File tree

1 file changed

+36
-14
lines changed

1 file changed

+36
-14
lines changed

src/main/java/ca/sqlpower/architect/etl/kettle/KettleJob.java

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ public void doExport(List<SQLTable> tableList, SQLDatabase targetDB ) throws SQL
332332
tableInputMeta.setSQL(tableMapping.get(sourceTable).toString());
333333
transMeta.addStep(stepMeta);
334334
//sort the Rows
335-
StepMeta sortedStepMeta = createSortRowsStep(transMeta,stepMeta);
335+
StepMeta sortedStepMeta = createSortRowsStep(transMeta,stepMeta,keyFields1);
336336
transMeta.addStep(sortedStepMeta);
337337
inputSteps.add(sortedStepMeta);
338338
}
@@ -921,10 +921,25 @@ public Object[] createTestRepository() {
921921
* @param inputStep
922922
* @return stepMeta
923923
*/
924-
private StepMeta createSortRowsStep(TransMeta transMeta, StepMeta inputStep) {
924+
private StepMeta createSortRowsStep(TransMeta transMeta, StepMeta inputStep, List<String[]> sortKeys) {
925925
StepMeta stepMeta = null ;
926+
926927
SortRowsMeta sortRowsMeta = new SortRowsMeta();
927928
sortRowsMeta.setDefault();
929+
930+
if (!sortKeys.isEmpty()) {
931+
String[] sortFields = sortKeys.get(0);
932+
boolean[] ascendingFields = new boolean[sortFields.length];
933+
boolean[] caseSensitive = new boolean[sortFields.length];
934+
for (int i =0 ;i<sortFields.length ; i++) {
935+
ascendingFields[i] = true;
936+
caseSensitive[i] = false;
937+
}
938+
sortRowsMeta.setFieldName(sortFields);
939+
sortRowsMeta.setAscending(new boolean[] {true});
940+
sortRowsMeta.setCaseSensitive(new boolean[] {false});
941+
}
942+
928943
Point location = inputStep.getLocation();
929944
stepMeta = new StepMeta("SortRows", "SortRows for " + inputStep.getName(), sortRowsMeta );
930945
stepMeta.setDraw(true);
@@ -950,16 +965,20 @@ List<StepMeta> createMergeJoins(int defaultJoinType, TransMeta transMeta, List<S
950965
mergeJoinMeta.setStepMeta1(inputSteps.get(0));
951966
mergeJoinMeta.setStepName2(inputSteps.get(1).getName());
952967
mergeJoinMeta.setStepMeta2(inputSteps.get(1));
953-
String[] keyField_1 = keyField1.get(0);
954-
String[] keyField_2 = keyField2.get(0);
968+
if(!keyField1.isEmpty()) {
969+
String[] keyField_1 = keyField1.get(0);
970+
logger.debug("Key_Field1 :"+Arrays.toString(keyField_1));
971+
mergeJoinMeta.setKeyFields1(keyField_1);
972+
}
973+
if(!keyField2.isEmpty()) {
974+
String[] keyField_2 = keyField2.get(0);
975+
logger.debug("Key_Field2 :"+Arrays.toString(keyField_2));
976+
mergeJoinMeta.setKeyFields2(keyField_2);
977+
}
955978
logger.debug("MergeJoin Join tables " +
956979
inputSteps.get(0).getName() + " and " +
957980
inputSteps.get(1).getName());
958-
logger.debug("Key_Field1 :"+Arrays.toString(keyField_1));
959-
logger.debug("Key_Field2 :"+Arrays.toString(keyField_2));
960-
mergeJoinMeta.setKeyFields1(keyField_1);
961-
mergeJoinMeta.setKeyFields2(keyField_2);
962-
//removing the 'SortRows for' form the previous inputsets(sortRoes steps) to make the name more meaning for merge join.
981+
//removing the text 'SortRows for' form the previous inputsets(sortRows steps) to make the name more meaning for merge join.
963982
String table1_name = inputSteps.get(0).getName();
964983
table1_name = table1_name.replaceFirst("SortRows for ","");
965984
String table2_name = inputSteps.get(0).getName();
@@ -985,11 +1004,14 @@ List<StepMeta> createMergeJoins(int defaultJoinType, TransMeta transMeta, List<S
9851004
mergeJoinMeta.setStepMeta1(mergeSteps.get(i));
9861005
mergeJoinMeta.setStepName2(inputSteps.get(i+2).getName());
9871006
mergeJoinMeta.setStepMeta2(inputSteps.get(i+2));
988-
String[] keyField_1 = keyField1.get(i+2);
989-
String[] keyField_2 = keyField2.get(i+2);
990-
991-
mergeJoinMeta.setKeyFields1(keyField_1);
992-
mergeJoinMeta.setKeyFields2(keyField_2);
1007+
if(!keyField1.isEmpty()) {
1008+
String[] keyField_1 = keyField1.get(i+2);
1009+
mergeJoinMeta.setKeyFields1(keyField_1);
1010+
}
1011+
if(!keyField2.isEmpty()) {
1012+
String[] keyField_2 = keyField2.get(i+2);
1013+
mergeJoinMeta.setKeyFields2(keyField_2);
1014+
}
9931015
String table1_name = inputSteps.get(i+2).getName();
9941016
table1_name = table1_name.replaceFirst("SortRows for ","");
9951017
StepMeta stepMeta = new StepMeta("MergeJoin", "Join table " + table1_name, mergeJoinMeta);

0 commit comments

Comments
 (0)