[ 
https://issues.apache.org/jira/browse/HIVE-10659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14564406#comment-14564406
 ] 

Hari Sankar Sivarama Subramaniyan commented on HIVE-10659:
----------------------------------------------------------

[~sushanth] [~leftylev] Thanks for the previous comments. Sorry for the 
misleading title here; my bad, I should have mentioned that this fix proposed 
here is intended to fix the delimiter issue only when beeline is accessed via 
schematool. I.e, this change is internal and is used only by the hive 
schematool and need not be documented. For the general solution to the issue 
mentioned in the jira, i.e. for beeline to support this feature we need to 
introduce a command similar to DELIMITER used in MySQL client. This will be 
covered under HIVE-10865 and should hopefully make it for 1.3 release.

Thanks
Hari

> Beeline command which contains semi-colon as a non-command terminator will 
> fail
> -------------------------------------------------------------------------------
>
>                 Key: HIVE-10659
>                 URL: https://issues.apache.org/jira/browse/HIVE-10659
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Hari Sankar Sivarama Subramaniyan
>            Assignee: Hari Sankar Sivarama Subramaniyan
>             Fix For: 1.2.1
>
>         Attachments: HIVE-10659.1.patch
>
>
> Consider a scenario where beeline is used to connect to a mysql server. The 
> commands executed via beeline can include stored procedures. For e.g. the 
> following command used to create a stored procedure is a valid command :
> {code}
> CREATE PROCEDURE RM_TLBS_LINKID() BEGIN IF EXISTS (SELECT * FROM 
> `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME` = 'TBLS' AND `COLUMN_NAME` 
> = 'LINK_TARGET_ID') THEN ALTER TABLE `TBLS` DROP FOREIGN KEY `TBLS_FK3` ; 
> ALTER TABLE `TBLS` DROP KEY `TBLS_N51` ; ALTER TABLE `TBLS` DROP COLUMN 
> `LINK_TARGET_ID` ; END IF; END
> {code}
> MySQL stored procedures have semi-colon ( ; ) as the statement terminator. 
> Since this coincides with beeline's only available command terminator, 
> semi-colon, beeline will not able to execute the above command successfully . 
> i.e, beeline tries to execute the below partial command instead of the 
> complete command shown above.
> {code}
> CREATE PROCEDURE RM_TLBS_LINKID() BEGIN IF EXISTS (SELECT * FROM 
> `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME` = 'TBLS' AND `COLUMN_NAME` 
> = 'LINK_TARGET_ID') THEN ALTER TABLE `TBLS` DROP FOREIGN KEY `TBLS_FK3` ; 
> {code} 
> The above situation can actually happen within Hive when Hive SchemaTool is 
> used to upgrade a mysql metastore db and the scripts used for the upgrade 
> process contain stored procedures(as the one introduced initially by 
> HIVE-7018). As of now, we cannot have any stored procedure as part of MySQL 
> metastore db upgrade scripts because schemaTool uses beeline to connect to 
> MySQL. As of now, beeline fails to execute any "create procedure" command or 
> similar command containing ; . This is a serious limitation; it needs to be 
> fixed by allowing the end user to provide an option to beeline to not use  
> semi-colon as the command delimiter and instead use new line character as the 
> command delimiter.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to