Skip to content

Commit 4ddbfd2

Browse files
authored
fix(ENGKNOW-3055): Fix replace on no matching columns. (#98)
1 parent bc6fc2c commit 4ddbfd2

3 files changed

Lines changed: 24 additions & 13 deletions

File tree

gortools/src/main/scala/gorsat/Analysis/ReplaceAnalysis.scala

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,20 @@ case class ReplaceAnalysis(context: GorContext, executeNor: Boolean, paramString
7272
}
7373

7474
override def process(r: Row): Unit = {
75-
val cvp = ReplaceCvp(r)
76-
try {
77-
val columnValues = columnsToReplace.indices.map(i => {
78-
cvp.replaceCol = columnsToReplace(i)
79-
val exIx = if(i > expressions.length - 1) 0 else i
80-
evalFunction(cvp, expressions(exIx), expressionTypes(exIx))
81-
})
82-
r.setColumns(columnsToReplace, columnValues.toArray)
83-
} catch {
84-
case e: GorParsingException =>
85-
val msg = s"Error in step: REPLACE $paramString\n${e.getMessage}"
86-
throw new GorDataException(msg, -1, header, r.getAllCols.toString, e)
75+
if (!columnsToReplace.isEmpty) {
76+
val cvp = ReplaceCvp(r)
77+
try {
78+
val columnValues = columnsToReplace.indices.map(i => {
79+
cvp.replaceCol = columnsToReplace(i)
80+
val exIx = if (i > expressions.length - 1) 0 else i
81+
evalFunction(cvp, expressions(exIx), expressionTypes(exIx))
82+
})
83+
r.setColumns(columnsToReplace, columnValues.toArray)
84+
} catch {
85+
case e: GorParsingException =>
86+
val msg = s"Error in step: REPLACE $paramString\n${e.getMessage}"
87+
throw new GorDataException(msg, -1, header, r.getAllCols.toString, e)
88+
}
8789
}
8890
super.process(r)
8991
}

gortools/src/main/scala/gorsat/Commands/Replace.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class Replace extends CommandInfo("REPLACE",
3838
val colNums = columnsFromHeader(colName, forcedInputHeader, executeNor).toArray
3939

4040
val filteredColNums = colNums.filter(i => i>= 2)
41-
if(filteredColNums.isEmpty) {
41+
if(!colNums.isEmpty && filteredColNums.isEmpty) {
4242
throw new GorParsingException("REPLACE is not allowed on Chrom/Pos columns")
4343
}
4444
CommandParsingResult(ReplaceAnalysis(context, executeNor, formula, forcedInputHeader, filteredColNums), forcedInputHeader)

gortools/src/test/java/gorsat/UTestReplace.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,13 @@ public void replaceStarWhenUsingNor() {
9797
"chrN\t0\t42\t42\t42\t42\n";
9898
Assert.assertEquals(expected, res);
9999
}
100+
101+
@Test
102+
public void replaceNoExistingColumns() {
103+
String query = "gorrow chr1,1 " +
104+
"| replace Foo_* if(#rc='0','wt',#rc)";
105+
String result = TestUtils.runGorPipe(query);
106+
Assert.assertEquals("chrom\tpos\nchr1\t1\n", result);
107+
}
108+
100109
}

0 commit comments

Comments
 (0)