From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id eMDnIH0RUWDvEQAA0tVLHw (envelope-from ) for ; Tue, 16 Mar 2021 20:13:49 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id kHK4HH0RUWAbXAAAB5/wlQ (envelope-from ) for ; Tue, 16 Mar 2021 20:13:49 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id C0FEB153E5 for ; Tue, 16 Mar 2021 21:13:48 +0100 (CET) Received: from localhost ([::1]:52084 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lMG4Z-0006lG-Vr for larch@yhetil.org; Tue, 16 Mar 2021 16:13:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52074) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lMFM3-0003v6-NP for emacs-orgmode@gnu.org; Tue, 16 Mar 2021 15:27:47 -0400 Received: from grinta.net ([109.74.203.128]:47510) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lMFLz-0003y0-OP for emacs-orgmode@gnu.org; Tue, 16 Mar 2021 15:27:47 -0400 Received: from black.local (p4fe717e2.dip0.t-ipconnect.de [79.231.23.226]) (Authenticated sender: daniele) by grinta.net (Postfix) with ESMTPSA id 69CC7E07F6 for ; Tue, 16 Mar 2021 19:27:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=grinta.net; s=2020; t=1615922853; bh=yGPRbuo7vqItaPWPTBX9FEfUgwIvprqY0PYaPParfIM=; h=Subject:To:References:From:Date:In-Reply-To:From; b=laQR4qeOxp0c7O3PSJ++IiPWSJqjhlqRnmopit+eDwEAZ0JnCGitIigzrCTlCiE3d dmp7/+03GiEujsq4iUajvVysFswmkVeMtMDkZMhiQ0/O0SwSrWX1GRI4dPmxZX6r0S MEuBxd9F0/ZQV8CTQaRNwkCZ7FUC6Yo5ox7NooStpcWylms7xSG3sw1J6twSs79dd7 sErCSot8OG2xHQuwhmBwPgaKy7AQTJviCQurHhu97eG1OhEU7tMxXsmMlhZG/+3Syy iTtDQb6eMwy6nN3xm68uH2QaBd9ui4DNjjZy1uAkAHsYa+vUWioPxWNBpmIobphOfq c4Oa+D+wmetqg== Subject: Re: [PATCH] ob-sql.el: Add support for SAP HANA To: emacs-orgmode@gnu.org References: From: Daniele Nicolodi Message-ID: Date: Tue, 16 Mar 2021 20:27:31 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=109.74.203.128; envelope-from=daniele@grinta.net; helo=grinta.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, NICE_REPLY_A=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1615925629; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=moTY6SmdWhfwTHIGRZu0SqtVi//RinVpMP9WaaeBbbc=; b=Ss5SgYEW+aepLOWRbnKttRn6CwgBC2ZC0h7ClV+jAVPfkrM8DMsRx/PFCghcM1n801IqFE a6bg/C7O7MgEhfuApn6W8EyaaYA0TozIR2RWE/aUOiXUtogWXvrAEGL5AgxPUk17QahTWl iwm2dbf7jWD8BQHKzLuiARSLfaqbRSPk6iddS+fVfuU+LZ532Gs6WAVntNq/3EBNLrf/YF XvylkjGv5N8Xc9topfTCa7dQV1xojo8GbAgmZ4HanlGjnxfdmIGOmiSHUfeQBaMnfC4T7O 0/Sg4zyjAOP4dFGe720JtH0uYjlHcmCrxwfF2U7T73t0EFiT+4eUdNtkotpePQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1615925629; a=rsa-sha256; cv=none; b=r7cbug1/ZRIGHwKJJ+qjuLrKPByJSOZQ2C7nh0/LD6Okex8sn2gtzupTPX5k0jTKSaCjXq GiPzvAKR5O+bcK64uNmRnPRkwu8xDEKf7BBblddtw/KKWMiJZefrVo/tlRd9KlHcXF9o+4 jXlc/SOpqLU55580ehLBvykU5jHk+RC6PrYvTzdj6Zeu5i6n60hQtdwPL3vClvNkjwcVEW ZvHulxmR7pPNSJe6IE56luRMtjUah23aHBg/nClnWyy4Rn3uSNMAJaZNm1XWy4v1QZULTj 1X1/TtG/Od+mUlnEDisfQTwD8IKd0kfxMIpqyrscfSAM4bxhUctZmTjaCN57jA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=grinta.net header.s=2020 header.b=laQR4qeO; spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Migadu-Spam-Score: -1.40 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=grinta.net header.s=2020 header.b=laQR4qeO; dmarc=none; spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Migadu-Queue-Id: C0FEB153E5 X-Spam-Score: -1.40 X-Migadu-Scanner: scn0.migadu.com X-TUID: kymaX535bB5f Hello Robin, from this patch I infer that you work with SAP. Can I bug you off-list with a few questions unrelated to org-mode but related to programmatically interact with SAP? Thank you. Best, Dan On 04/02/2021 08:55, Robin Campbell Joy wrote: > * lisp/ob-sql.el (org-babel-execute:sql, org-babel-sql-dbstring-saphana): > Add basic support for SAP HANA to SQL blocks > * testing/lisp/test-ob-sql.el: Basic tests for generated db connection > string > > This change adds basic support for SAP HANA to SQL blocks by > specifying saphana as :engine. > > It also adds a new header arg `dbinstance' in order to specify the SAP > HANA instance to connect to. > > Signed-off-by: Robin Campbell Joy > > --- >  lisp/ob-sql.el              |  25 ++- >  testing/lisp/test-ob-sql.el | 382 ++++++++++++++++++++++++++++++++++++ >  2 files changed, 406 insertions(+), 1 deletion(-) >  create mode 100644 testing/lisp/test-ob-sql.el > > diff --git a/lisp/ob-sql.el b/lisp/ob-sql.el > index 902194ae8..5398c85aa 100644 > --- a/lisp/ob-sql.el > +++ b/lisp/ob-sql.el > @@ -40,6 +40,7 @@ >  ;; - dbuser >  ;; - dbpassword >  ;; - dbconnection (to reference connections in sql-connection-alist) > +;; - dbinstance >  ;; - database >  ;; - colnames (default, nil, means "yes") >  ;; - result-params > @@ -58,6 +59,7 @@ >  ;; - postgresql (postgres) >  ;; - oracle >  ;; - vertica > +;; - saphana >  ;; >  ;; TODO: >  ;; > @@ -85,6 +87,7 @@ >      (dbport       . :any) >      (dbuser       . :any) >      (dbpassword       . :any) > +    (dbinstance       . :any) >      (database       . :any)) >    "SQL-specific header arguments.") >   > @@ -174,6 +177,18 @@ SQL Server on Windows and Linux platform." >    (when database (format "-d %s" database)))) >        " ")) >   > +(defun org-babel-sql-dbstring-saphana (host port instance user password > database) > +  "Make SAP HANA command line args for database connection. Pass nil to > omit that arg." > +  (mapconcat #'identity > +             (delq nil > +                   (list (when (and host port) (format "-n %s:%s" host > port)) > +                         (when (and host (not port)) (format "-n %s" host)) > +                         (when instance (format "-i %d" instance)) > +                         (when user (format "-u %s" user)) > +                         (when password (format "-p %s" > (shell-quote-argument password))) > +                         (when database (format "-d %s" database)))) > +             " ")) > + >  (defun org-babel-sql-convert-standard-filename (file) >    "Convert FILE to OS standard file name. >  If in Cygwin environment, uses Cygwin specific function to > @@ -197,6 +212,7 @@ database connections." >                               (:dbport . sql-port) >                               (:dbuser . sql-user) >                               (:dbpassword . sql-password) > +                             (:dbinstance . sql-dbinstance) >                               (:database . sql-database))) >               (mapped-name (cdr (assq name name-mapping)))) >          (cadr (assq mapped-name > @@ -212,6 +228,7 @@ This function is called by > `org-babel-execute-src-block'." >           (dbport (org-babel-find-db-connection-param params :dbport)) >           (dbuser (org-babel-find-db-connection-param params :dbuser)) >           (dbpassword (org-babel-find-db-connection-param params > :dbpassword)) > +         (dbinstance (org-babel-find-db-connection-param params > :dbinstance)) >           (database (org-babel-find-db-connection-param params :database)) >           (engine (cdr (assq :engine params))) >           (colnames-p (not (equal "no" (cdr (assq :colnames params))))) > @@ -276,6 +293,12 @@ footer=off -F \"\t\"  %s -f %s -o %s %s" >        dbhost dbport dbuser dbpassword database) >       (org-babel-process-file-name in-file) >       (org-babel-process-file-name out-file))) > +    (saphana (format "hdbsql %s -I %s -o %s %s" > +     (org-babel-sql-dbstring-saphana > +      dbhost dbport dbinstance dbuser dbpassword database) > +     (org-babel-process-file-name in-file) > +     (org-babel-process-file-name out-file) > +     (or cmdline ""))) >                      (t (user-error "No support for the %s SQL engine" > engine))))) >      (with-temp-file in-file >        (insert > @@ -309,7 +332,7 @@ SET COLSEP '|' >   (progn (insert-file-contents-literally out-file) (buffer-string))) >        (with-temp-buffer >   (cond > - ((memq (intern engine) '(dbi mysql postgresql postgres sqsh vertica)) > + ((memq (intern engine) '(dbi mysql postgresql postgres saphana sqsh > vertica)) >    ;; Add header row delimiter after column-names header in first line >    (cond >     (colnames-p > diff --git a/testing/lisp/test-ob-sql.el b/testing/lisp/test-ob-sql.el > new file mode 100644 > index 000000000..51edd2309 > --- /dev/null > +++ b/testing/lisp/test-ob-sql.el > @@ -0,0 +1,382 @@ > +;;; test-ob-sql.el --- tests for ob-sql.el > + > +;; Copyright (C) 2021 Robin Joy > + > +;; Author: Robin Joy > > +;; Keywords: lisp > + > +;; This program is free software; you can redistribute it and/or modify > +;; it under the terms of the GNU General Public License as published by > +;; the Free Software Foundation, either version 3 of the License, or > +;; (at your option) any later version. > + > +;; This program is distributed in the hope that it will be useful, > +;; but WITHOUT ANY WARRANTY; without even the implied warranty of > +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the > +;; GNU General Public License for more details. > + > +;; You should have received a copy of the GNU General Public License > +;; along with this program.  If not, see >. > + > +;;; Code: > + > +(require 'org-test) > +(require 'ob-sql) > +(unless (featurep 'ob-sql) > +  (signal 'missing-test-dependency "Support for sql code blocks")) > + > +(defmacro ob-sql/command (&rest body) > +  "Execute body and return the command that would have been executed." > +  `(cl-letf (((symbol-function 'org-babel-eval) > +              (lambda (command &rest _) (throw 'sql-command command)))) > +     (catch 'sql-command > +       ,@body))) > + > +(defmacro ob-sql/command-should-contain (regexp sql-block) > +  "Check that REGEXP is contained in the command executed when > evaluating SQL-BLOCK." > +  `(let ((regexps ,(if (listp regexp) regexp `(list ,regexp))) > +         (command (ob-sql/command (org-test-with-temp-text > +                                      ,sql-block > +                                    (org-babel-next-src-block) > +                                    (org-babel-execute-src-block))))) > +     (dolist (regexp regexps) > +       (should (string-match-p regexp command))))) > + > +(defmacro ob-sql/command-should-not-contain (regexp sql-block) > +  "Check that REGEXP is not contained in the command executed when > evaluating SQL-BLOCK." > +  `(let ((command (ob-sql/command > +                   (org-test-with-temp-text > +                       ,sql-block > +                     (org-babel-next-src-block) > +                     (org-babel-execute-src-block))))) > +     (should-not (string-match-p ,regexp command)))) > + > +;;; dbish > +(ert-deftest ob-sql/engine-dbi-uses-dbish () > +  (ob-sql/command-should-contain "^dbish " " > +#+begin_src sql :engine dbi > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-dbish-uses-batch-mode () > +  (ob-sql/command-should-contain " --batch " " > +#+begin_src sql :engine dbi :dbuser dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-dbish-can-pass-additional-cmdline-params () > +  (ob-sql/command-should-contain " cmdlineparams " " > +#+begin_src sql :engine dbi :dbpassword dummy :cmdline cmdlineparams > +  select * from dummy; > +#+end_src")) > + > +;;; monetdb > +(ert-deftest ob-sql/engine-monetdb-uses-mclient () > +  (ob-sql/command-should-contain "^mclient " " > +#+begin_src sql :engine monetdb > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-monetdb-outputs-values-tab-separated () > +  (ob-sql/command-should-contain " -f tab " " > +#+begin_src sql :engine monetdb > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-monetdb-can-pass-additional-cmdline-params () > +  (ob-sql/command-should-contain " cmdlineparams " " > +#+begin_src sql :engine monetdb :dbpassword dummy :cmdline cmdlineparams > +  select * from dummy; > +#+end_src")) > + > +;;; mssql > +(ert-deftest ob-sql/engine-mssql-uses-sqlcmd () > +  (ob-sql/command-should-contain "^sqlcmd " " > +#+begin_src sql :engine mssql > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mssql-outputs-values-tab-separated () > +  (ob-sql/command-should-contain " -s \"\t\" " " > +#+begin_src sql :engine mssql > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mssql-can-pass-additional-cmdline-params () > +  (ob-sql/command-should-contain " cmdlineparams " " > +#+begin_src sql :engine mssql :dbpassword dummy :cmdline cmdlineparams > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mssql-passes-user-if-provided () > +  (ob-sql/command-should-contain " -U \"dummy\" " " > +#+begin_src sql :engine mssql :dbuser dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mssql-passes-password-if-provided () > +  (ob-sql/command-should-contain " -P \"dummy\" " " > +#+begin_src sql :engine mssql :dbpassword dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mssql-passes-dbhost-if-provided () > +  (ob-sql/command-should-contain " -S \"localhost\" " " > +#+begin_src sql :engine mssql :dbhost localhost > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mssql-passes-database-if-provided () > +  (ob-sql/command-should-contain " -d \"R01\" " " > +#+begin_src sql :engine mssql :database R01 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mssql-passes-all-parameter-provided () > +  (ob-sql/command-should-contain '(" -d \"R01\" " " -S \"localhost\" " > " -P \"pwd\" " " -U \"usr\" ") " > +#+begin_src sql :engine mssql :database R01 :dbhost localhost :dbport > 30101 :dbinstance 1 :dbuser usr :dbpassword pwd > +  select * from dummy; > +#+end_src")) > + > +;;; MySQL > +(ert-deftest ob-sql/engine-mysql-uses-mysql () > +  (ob-sql/command-should-contain "^mysql " " > +#+begin_src sql :engine mysql > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mysql-passes-user-if-provided () > +  (ob-sql/command-should-contain " -udummy " " > +#+begin_src sql :engine mysql :dbuser dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mysql-passes-password-if-provided () > +  (ob-sql/command-should-contain " -pdummy " " > +#+begin_src sql :engine mysql :dbpassword dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mysql-passes-dbhost-if-provided () > +  (ob-sql/command-should-contain " -hlocalhost " " > +#+begin_src sql :engine mysql :dbhost localhost > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mysql-passes-host-if-provided () > +  (ob-sql/command-should-contain " -P30101 " " > +#+begin_src sql :engine mysql :dbport 30101 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mysql-passes-database-if-provided () > +  (ob-sql/command-should-contain " -dR01 " " > +#+begin_src sql :engine mysql :database R01 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-mysql-passes-all-parameter-provided () > +  (ob-sql/command-should-contain '(" -dR01 " " -hlocalhost " " -P30101 > " " -ppwd " " -uusr ") " > +#+begin_src sql :engine mysql :database R01 :dbhost localhost :dbport > 30101 :dbinstance 1 :dbuser usr :dbpassword pwd > +  select * from dummy; > +#+end_src")) > + > +;;; oracle > +(ert-deftest ob-sql/engine-oracle-uses-sqlplus () > +  (ob-sql/command-should-contain "^sqlplus " " > +#+begin_src sql :engine oracle :dbuser dummy :dbpassword dummy > :database dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest > ob-sql/engine-oracle-passes-user-pwd-database-host-port-if-provided () > +  (ob-sql/command-should-contain " dummy/dummypwd@localhost:12345/R01 " " > +#+begin_src sql :engine oracle :dbuser dummy :dbpassword dummypwd > :dbhost localhost :database R01 :dbport 12345 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest > ob-sql/engine-oracle-passes-user-pwd-database-if-no-host-port-provided () > +  (ob-sql/command-should-contain " dummy/dummypwd@R01 " " > +#+begin_src sql :engine oracle :dbuser dummy :dbpassword dummypwd > :database R01 > +  select * from dummy; > +#+end_src")) > + > +;;; postgresql > +(ert-deftest ob-sql/engine-postgresql-uses-psql () > +  (ob-sql/command-should-contain "^psql " " > +#+begin_src sql :engine postgresql > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-postgresql-passes-password-if-provided () > +  (ob-sql/command-should-contain "^PGPASSWORD=dummy " " > +#+begin_src sql :engine postgresql :dbpassword dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-postgresql-stop-on-error () > +  (ob-sql/command-should-contain " --set=\"ON_ERROR_STOP=1\" " " > +#+begin_src sql :engine postgresql > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest > ob-sql/engine-postgresql-does-not-output-column-names-if-requested () > +  (ob-sql/command-should-contain " -t " " > +#+begin_src sql :engine postgresql :colnames no > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-postgresql-outputs-column-names-by-default () > +  (ob-sql/command-should-not-contain " -t " " > +#+begin_src sql :engine postgresql > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-postgresql-can-pass-additional-cmdline-params () > +  (ob-sql/command-should-contain " cmdlineparams$" " > +#+begin_src sql :engine postgresql :dbpassword dummy :cmdline cmdlineparams > +  select * from dummy; > +#+end_src")) > + > +;;; SAP HANA > +(ert-deftest ob-sql/engine-saphana-uses-hdbsql () > +  (ob-sql/command-should-contain "^hdbsql " " > +#+begin_src sql :engine saphana > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-saphana-passes-user-if-provided () > +  (ob-sql/command-should-contain " -u dummy " " > +#+begin_src sql :engine saphana :dbuser dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-saphana-passes-password-if-provided () > +  (ob-sql/command-should-contain " -p dummy " " > +#+begin_src sql :engine saphana :dbpassword dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-saphana-passes-dbinstance-if-provided () > +  (ob-sql/command-should-contain " -i 1 " " > +#+begin_src sql :engine saphana :dbinstance 1 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-saphana-passes-dbhost-if-provided () > +  (ob-sql/command-should-contain " -n localhost " " > +#+begin_src sql :engine saphana :dbhost localhost > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-saphana-passes-dbhost-and-dbport-if-provided () > +  (ob-sql/command-should-contain " -n localhost:30101 " " > +#+begin_src sql :engine saphana :dbhost localhost :dbport 30101 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest > ob-sql/engine-saphana-does-not-pass-host-port-if-only-port-provided () > +  (ob-sql/command-should-not-contain " -n" " > +#+begin_src sql :engine saphana :dbport 30101 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-saphana-passes-database-if-provided () > +  (ob-sql/command-should-contain " -d R01 " " > +#+begin_src sql :engine saphana :database R01 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-saphana-passes-all-parameter-provided () > +  (ob-sql/command-should-contain '(" -d R01 " " -n localhost:30101 " " > -i 1 " " -p pwd " " -u usr") " > +#+begin_src sql :engine saphana :database R01 :dbhost localhost :dbport > 30101 :dbinstance 1 :dbuser usr :dbpassword pwd > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-saphana-can-pass-additional-cmdline-params () > +  (ob-sql/command-should-contain " cmdlineparams$" " > +#+begin_src sql :engine saphana :dbpassword dummy :cmdline cmdlineparams > +  select * from dummy; > +#+end_src")) > + > +;;; sqsh > +(ert-deftest ob-sql/engine-sqsh-uses-sqsh () > +  (ob-sql/command-should-contain "^sqsh " " > +#+begin_src sql :engine sqsh > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-sqsh-can-pass-additional-cmdline-params () > +  (ob-sql/command-should-contain " cmdlineparams " " > +#+begin_src sql :engine sqsh :dbpassword dummy :cmdline cmdlineparams > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-sqsh-passes-user-if-provided () > +  (ob-sql/command-should-contain " -U \"dummy\" " " > +#+begin_src sql :engine sqsh :dbuser dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-sqsh-passes-password-if-provided () > +  (ob-sql/command-should-contain " -P \"dummy\" " " > +#+begin_src sql :engine sqsh :dbpassword dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-sqsh-passes-host-if-provided () > +  (ob-sql/command-should-contain " -S \"localhost\" " " > +#+begin_src sql :engine sqsh :dbhost localhost > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-sqsh-passes-database-if-provided () > +  (ob-sql/command-should-contain " -D \"R01\" " " > +#+begin_src sql :engine sqsh :database R01 > +  select * from dummy; > +#+end_src")) > + > + > +;;; vertica > +(ert-deftest ob-sql/engine-vertica-uses-vsql () > +  (ob-sql/command-should-contain "^vsql " " > +#+begin_src sql :engine vertica > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-vertica-can-pass-additional-cmdline-params () > +  (ob-sql/command-should-contain " cmdlineparams$" " > +#+begin_src sql :engine vertica :dbpassword dummy :cmdline cmdlineparams > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-vertica-passes-user-if-provided () > +  (ob-sql/command-should-contain " -U dummy " " > +#+begin_src sql :engine vertica :dbuser dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-vertica-passes-password-if-provided () > +  (ob-sql/command-should-contain " -w dummy " " > +#+begin_src sql :engine vertica :dbpassword dummy > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-vertica-passes-host-if-provided () > +  (ob-sql/command-should-contain " -h localhost " " > +#+begin_src sql :engine vertica :dbhost localhost > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-vertica-passes-database-if-provided () > +  (ob-sql/command-should-contain " -d R01 " " > +#+begin_src sql :engine vertica :database R01 > +  select * from dummy; > +#+end_src")) > + > +(ert-deftest ob-sql/engine-vertica-passes-port-if-provided () > +  (ob-sql/command-should-contain " -p 12345 " " > +#+begin_src sql :engine vertica :dbport 12345 > +  select * from dummy; > +#+end_src")) > + > +;;; test-ob-sqlite.el ends here > --