Я параметризирую запрос в Scala.
У меня есть массив строк с именами столбцов с именем colNames
.
Я хочу создать строку, в которой для каждого имени строки вывод будет A.colName = B.colName
, а затем соединить все элементы в массиве, поместив строку «И» между каждым элементом.
Пример ввода
val colNames = Array("colName1","colName2")
val table1 = "A"
val table2 = "B"
Пример желаемого результата
"A.colName1 = B.colName1 AND A.colName2 = B.colName2"
В языке, отличном от FP, я бы сделал это с помощью цикла for, но я не знаю, как это сделать в Scala функциональным способом.
@MateuszKubuszok Я передаю необработанный запрос в библиотеку искр снежинки. A и B - это таблицы, и я хочу использовать их в условии, где столбецName равен
Тогда ответ @Dogbert должен помочь. (хотя я бы не стал использовать инфиксную нотацию).
Где бы ни оказался этот фрагмент запроса: убедитесь, что содержимое colNames
не контролируется пользователями, иначе вы быстро получите запросы по типу colNames = Array("colName1", "colName2 AND sendAllTehCoinzTo('BobbyTables') = 'success'")
.
Вы можете использовать методы map и mkString для Array:
scala> colNames map { colName => s"${table1}.${colName} = ${table2}.${colName}" } mkString " AND "
val res0: String = A.colName1 = B.colName1 AND A.colName2 = B.colName2
Используете ли вы необработанный драйвер JDBC? Как вы хотите соединить
"A"
с"colName1"
и"B"
с"colName2"
?