diff --git a/docs/interpreter/jdbc.md b/docs/interpreter/jdbc.md index b0f5d6ba0db..5c6c57bda84 100644 --- a/docs/interpreter/jdbc.md +++ b/docs/interpreter/jdbc.md @@ -139,11 +139,6 @@ The JDBC interpreter properties are defined by default like below. 120 Time to live sql completer in seconds (-1 to update everytime, 0 to disable update) - - default.splitQueries - false - Each query is executed apart and returns the result - If you want to connect other databases such as `Mysql`, `Redshift` and `Hive`, you need to edit the property values. @@ -245,6 +240,19 @@ So you don't need to type this prefix in every paragraphs' header. + +### Multiple SQL statements + +You can write multiple sql statements in one paragraph, just separate them with semi-colon. e.g + +```sql + +USE zeppelin_demo; + +CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), + species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); +``` + ### Apply Zeppelin Dynamic Forms You can leverage [Zeppelin Dynamic Form](../usage/dynamic_form/intro.html) inside your queries. You can use both the `text input` and `select form` parametrization features. diff --git a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java index dda54137f36..24caf7d6704 100644 --- a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java +++ b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java @@ -112,7 +112,6 @@ public class JDBCInterpreter extends KerberosInterpreter { static final String COMPLETER_SCHEMA_FILTERS_KEY = "completer.schemaFilters"; static final String COMPLETER_TTL_KEY = "completer.ttlInSeconds"; static final String DEFAULT_COMPLETER_TTL = "120"; - static final String SPLIT_QURIES_KEY = "splitQueries"; static final String JDBC_JCEKS_FILE = "jceks.file"; static final String JDBC_JCEKS_CREDENTIAL_KEY = "jceks.credentialKey"; static final String PRECODE_KEY_TEMPLATE = "%s.precode"; @@ -668,12 +667,6 @@ private InterpreterResult executeSql(String propertyKey, String sql, String paragraphId = context.getParagraphId(); String user = context.getAuthenticationInfo().getUser(); - boolean splitQuery = false; - String splitQueryProperty = getProperty(String.format("%s.%s", propertyKey, SPLIT_QURIES_KEY)); - if (StringUtils.isNotBlank(splitQueryProperty) && splitQueryProperty.equalsIgnoreCase("true")) { - splitQuery = true; - } - try { connection = getConnection(propertyKey, context); } catch (Exception e) { @@ -695,19 +688,8 @@ private InterpreterResult executeSql(String propertyKey, String sql, } try { - List sqlArray; - sql = sql.trim(); - if (splitQuery) { - sqlArray = sqlSplitter.splitSql(sql); - } else { - if (sql.endsWith(";")) { - sql = sql.substring(0, sql.length() - 1); - } - sqlArray = Arrays.asList(sql); - } - - for (int i = 0; i < sqlArray.size(); i++) { - String sqlToExecute = sqlArray.get(i); + List sqlArray = sqlSplitter.splitSql(sql); + for (String sqlToExecute : sqlArray) { statement = connection.createStatement(); // fetch n+1 rows in order to indicate there's more rows available (for large selects) diff --git a/jdbc/src/main/resources/interpreter-setting.json b/jdbc/src/main/resources/interpreter-setting.json index e018e86dc4f..c84056f7b4c 100644 --- a/jdbc/src/main/resources/interpreter-setting.json +++ b/jdbc/src/main/resources/interpreter-setting.json @@ -60,13 +60,6 @@ "description": "Runs before each run of the paragraph, in the same connection", "type": "textarea" }, - "default.splitQueries": { - "envName": null, - "propertyName": "default.splitQueries", - "defaultValue": false, - "description": "Each query is executed apart and returns the result", - "type": "checkbox" - }, "common.max_count": { "envName": null, "propertyName": "common.max_count", diff --git a/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java b/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java index 79c15d8d5bc..125ef9ce4ad 100644 --- a/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java +++ b/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java @@ -391,11 +391,14 @@ public void testDefaultSplitQuries() throws IOException, InterpreterException { assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code()); List resultMessages = context.out.toInterpreterResultMessage(); - assertEquals(1, resultMessages.size()); + assertEquals(2, resultMessages.size()); assertEquals(InterpreterResult.Type.TABLE, resultMessages.get(0).getType()); assertEquals("ID\tNAME\na\ta_name\nb\tb_name\nc\tnull\n", resultMessages.get(0).getData()); + assertEquals(InterpreterResult.Type.TABLE, resultMessages.get(1).getType()); + assertEquals("ID\tNAME\n", + resultMessages.get(1).getData()); } @Test @@ -612,12 +615,15 @@ public void testPrecode() throws IOException, InterpreterException { assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code()); List resultMessages = context.out.toInterpreterResultMessage(); - assertEquals(2, resultMessages.size()); + assertEquals(3, resultMessages.size()); assertEquals(InterpreterResult.Type.TEXT, resultMessages.get(0).getType()); assertEquals("Query executed successfully. Affected rows : 0\n", resultMessages.get(0).getData()); - assertEquals(InterpreterResult.Type.TABLE, resultMessages.get(1).getType()); - assertEquals("ID\n1\n", resultMessages.get(1).getData()); + assertEquals(InterpreterResult.Type.TEXT, resultMessages.get(1).getType()); + assertEquals("Query executed successfully. Affected rows : 1\n", + resultMessages.get(1).getData()); + assertEquals(InterpreterResult.Type.TABLE, resultMessages.get(2).getType()); + assertEquals("ID\n1\n", resultMessages.get(2).getData()); } @Test @@ -670,12 +676,15 @@ public void testPrecodeWithAnotherPrefix() throws IOException, List resultMessages = context.out.toInterpreterResultMessage(); assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code()); - assertEquals(2, resultMessages.size()); + assertEquals(3, resultMessages.size()); assertEquals(InterpreterResult.Type.TEXT, resultMessages.get(0).getType()); assertEquals("Query executed successfully. Affected rows : 0\n", resultMessages.get(0).getData()); - assertEquals(InterpreterResult.Type.TABLE, resultMessages.get(1).getType()); - assertEquals("ID\n2\n", resultMessages.get(1).getData()); + assertEquals(InterpreterResult.Type.TEXT, resultMessages.get(1).getType()); + assertEquals("Query executed successfully. Affected rows : 1\n", + resultMessages.get(1).getData()); + assertEquals(InterpreterResult.Type.TABLE, resultMessages.get(2).getType()); + assertEquals("ID\n2\n", resultMessages.get(2).getData()); } @Test