You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by ja...@apache.org on 2019/08/02 15:28:19 UTC
[carbondata] branch master updated: [CARBONDATA-3477] deal line
break chars correctly after 'select' in 'update ... select columns' sql
This is an automated email from the ASF dual-hosted git repository.
jackylk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/carbondata.git
The following commit(s) were added to refs/heads/master by this push:
new f005fd4 [CARBONDATA-3477] deal line break chars correctly after 'select' in 'update ... select columns' sql
f005fd4 is described below
commit f005fd4239f1d307edf348d54b62b251183234df
Author: Zhang Zhichao <44...@qq.com>
AuthorDate: Fri Jul 26 23:57:53 2019 +0800
[CARBONDATA-3477] deal line break chars correctly after 'select' in 'update ... select columns' sql
Problem:
When use below sql to update table:
UPDATE IUD_table2 a
SET (a.IUD_table2_country, a.IUD_table2_salary) = (select
b.IUD_table1_country, b.IUD_table1_salary from IUD_table1 b where b.IUD_table1_id = 8)
WHERE a.IUD_table2_id < 6 or a.IUD_table2_id > 15
It will throw out exception.
Solution:
deal line break chars correctly after 'select' in 'update ... select columns' sql
This closes #3338
---
.../testsuite/iud/UpdateCarbonTableTestCase.scala | 40 +++++++++++++++++++++-
.../spark/sql/parser/CarbonSpark2SqlParser.scala | 3 +-
2 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/UpdateCarbonTableTestCase.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/UpdateCarbonTableTestCase.scala
index 9e7106c..107d228 100644
--- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/UpdateCarbonTableTestCase.scala
+++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/UpdateCarbonTableTestCase.scala
@@ -788,7 +788,45 @@ class UpdateCarbonTableTestCase extends QueryTest with BeforeAndAfterAll {
sql("""drop table if exists iud.dest33_part""")
}
- override def afterAll {
+ test("[CARBONDATA-3477] deal line break chars correctly after 'select' in 'update ... select columns' sql") {
+ sql("""drop table if exists iud.dest11""").show
+ sql("""create table iud.dest11 (c1 string,c2 int,c3 string,c5 string) STORED BY 'org.apache.carbondata.format'""")
+ sql(s"""LOAD DATA LOCAL INPATH '$resourcesPath/IUD/dest.csv' INTO table iud.dest11""")
+ sql("""update iud.dest11 d set (d.c3, d.c5 ) = (select
+ s.c33,s.c55 from iud.source2 s where d.c1 = s.c11) where 1 = 1""").show()
+ checkAnswer(
+ sql("""select c3,c5 from iud.dest11"""),
+ Seq(Row("cc","ccc"), Row("dd","ddd"),Row("ee","eee"), Row("MGM","Disco"),Row("RGK","Music"))
+ )
+ sql("update iud.dest11 d set (d.c3, d.c5 ) = (select\ns.c33,s.c66 from iud.source2 s where d.c1 = s.c11) where 1 = 1").show()
+ checkAnswer(
+ sql("""select c3,c5 from iud.dest11"""),
+ Seq(Row("cc","ccc"), Row("dd","ddd"),Row("ee","eee"), Row("MGM","10"),Row("RGK","8"))
+ )
+ sql("update iud.dest11 d set (d.c3, d.c5 ) = (select\r\ns.c55,s.c66 from iud.source2 s where d.c1 = s.c11) where 1 = 1").show()
+ checkAnswer(
+ sql("""select c3,c5 from iud.dest11"""),
+ Seq(Row("cc","ccc"), Row("dd","ddd"),Row("ee","eee"), Row("Disco","10"),Row("Music","8"))
+ )
+ sql("update iud.dest11 d set (d.c3, d.c5 ) = (select\rs.c33,s.c66 from iud.source2 s where d.c1 = s.c11) where 1 = 1").show()
+ checkAnswer(
+ sql("""select c3,c5 from iud.dest11"""),
+ Seq(Row("cc","ccc"), Row("dd","ddd"),Row("ee","eee"), Row("MGM","10"),Row("RGK","8"))
+ )
+ sql("update iud.dest11 d set (d.c3, d.c5 ) = (select\ts.c33,s.c55 from iud.source2 s where d.c1 = s.c11) where 1 = 1").show()
+ checkAnswer(
+ sql("""select c3,c5 from iud.dest11"""),
+ Seq(Row("cc","ccc"), Row("dd","ddd"),Row("ee","eee"), Row("MGM","Disco"),Row("RGK","Music"))
+ )
+ sql("update iud.dest11 d set (d.c3, d.c5 ) = (select\t\ns.c33,s.c55 from iud.source2 s where d.c1 = s.c11) where 1 = 1").show()
+ checkAnswer(
+ sql("""select c3,c5 from iud.dest11"""),
+ Seq(Row("cc","ccc"), Row("dd","ddd"),Row("ee","eee"), Row("MGM","Disco"),Row("RGK","Music"))
+ )
+ sql("""drop table iud.dest11""").show
+ }
+
+ override def afterAll {
sql("use default")
sql("drop database if exists iud cascade")
CarbonProperties.getInstance()
diff --git a/integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala b/integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
index d2fdb08..6db6d01 100644
--- a/integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
+++ b/integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
@@ -284,8 +284,9 @@ class CarbonSpark2SqlParser extends CarbonDDLSqlParser {
("=" ~> restInput) <~ opt(";") ^^ {
case tab ~ columns ~ rest =>
val (sel, where) = splitQuery(rest)
+ val selectPattern = """^\s*select\s+""".r
val (selectStmt, relation) =
- if (!sel.toLowerCase.startsWith("select ")) {
+ if (!selectPattern.findFirstIn(sel.toLowerCase).isDefined) {
if (sel.trim.isEmpty) {
sys.error("At least one source column has to be specified ")
}