emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] [babel] Expand code is failing on a #+call line


From: Sebastien Vauban
Subject: [O] [babel] Expand code is failing on a #+call line
Date: Thu, 20 Oct 2011 17:12:49 +0200
User-agent: Gnus/5.110018 (No Gnus v0.18) Emacs/23.3 (windows-nt)

Hi Eric,

* Config

** Some file to be ingested

Let's say I have this code in a =my-lob.org= file:

#+srcname: add-column-in-table(table="", column="", type="", nullability="")
#+begin_src sql
-- add column `$column' (if column does not exist yet)
IF NOT EXISTS (SELECT *
               FROM INFORMATION_SCHEMA.COLUMNS
               WHERE TABLE_NAME = '$table'
               AND COLUMN_NAME = '$column')
BEGIN
    ALTER TABLE $table
    ADD $column $type $nullability
END
#+end_src

** In .emacs

... which I ingest at Emacs startup through the lines:

#+begin_src emacs-lisp
(require 'ob-lob)
(org-babel-lob-ingest "~/org/my-lob.org")
#+end_src

* Some other document

** Source params

In some other document, I have a table with columns I'd like to add in a
database:

#+results: params
| table   | column         | type        | nullability |
|---------+----------------+-------------+-------------|
| dossier | pfiResetDate   | date        | NULL        |
| dossier | pfiResetOprID  | tinyint     | NULL        |
| dossier | pfiResetOprNom | varchar(64) | NULL        |

Normally, I could call statements like this:

#+call: add-column-in-table(table=params[2,0], column=params[2,1], 
type=params[2,2], nullability=params[2,3])

But...

** Expand code is failing

=C-c C-v C-v= does generate an error:

    setf: Wrong type argument: consp, nil

#+begin_src text
Debugger entered--Lisp error: (wrong-type-argument consp nil)
  setcar(nil ((:cache . "") (:comments . "") (:exports . "") (:noweb . "") 
(:padline . "") (:results . "") (:shebang . "") (:tangle . "")))
  (setf (nth 2 info) (sort (org-babel-merge-params ... params) (lambda ... 
...)))
  (let* ((info ...) (lang ...) (params ...) (body ...) (expand-cmd ...) 
(assignments-cmd ...) (expanded ...)) (org-edit-src-code nil expanded (concat 
"*Org-Babel Preview " ... "[ " lang " ]*")))
  org-babel-expand-src-block()
  call-interactively(org-babel-expand-src-block nil nil)
#+end_src

This stays very unclear to me...

** Execute code is failing

By the way, =C-c C-v C-e= returns as well an error:

    let: Wrong type argument: stringp, nil

This is explainable: that's because the SQL =engine= is not known (not given
neither in the header of the code block, neither anywhere in this file).

#+begin_src text
Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  intern(nil)
  (let ((--cl-var-- ...)) (cond (... ...) (... ...) (... ...) (t ...)))
  (case (intern engine) ((quote msosql) (format "osql %s -s \"  \" -i %s -o %s" 
... ... ...)) ((quote mysql) (format "mysql %s < %s > %s" ... ... ...)) ((quote 
postgresql) (format "psql -A -P footer=off -F \"        \"  -f %s -o %s %s" ... 
... ...)) (t (error "no support for the %s sql engine" engine)))
  (let* ((result-params ...) (cmdline ...) (engine ...) (in-file ...) (out-file 
...) (header-delim "") (command ...)) (with-temp-file in-file (insert ...)) 
(message command) (shell-command command) (if (or ... ... ... ... ...) 
(with-temp-buffer ...) (with-temp-buffer ... ... ...)))
  org-babel-execute:sql("-- add column `$column' (if column does not exist 
yet)\nIF NOT EXISTS (SELECT *\n               FROM INFORMATION_SCHEMA.COLUMNS\n 
              WHERE TABLE_NAME = '$table'\n               AND COLUMN_NAME = 
'$column')\nBEGIN\n    ALTER TABLE $table\n    ADD $column $type 
$nullability\nEND" ((:var table . "dossier") (:var column . "pfiResetDate") 
(:var type . "date") (:var nullability . "NULL") (:colname-names) 
(:rowname-names) (:result-params "silent" "replace") (:result-type . value) 
(:comments . "") (:shebang . "") (:cache . "no") (:padline . "") (:noweb . 
"no") (:tangle . "no") (:exports . "code") (:results . "silent") (:padnewline . 
"yes") (:hlines . "no") (:session . "none") (:result-type . value) 
(:result-params "replace") (:rowname-names) (:colname-names)))
#+end_src

Though, I guess we should have a proper manner to report that some necessary
arguments are missing, instead of failing with a unclear message.

** Other weirdnesses

While the variable =org-babel-library-of-babel= contains the ingested code
(here, of =add-column-in-table=), the variable =org-babel-lob-files= is =nil=!?

** Speed commands

Speed commands don't work on the =#+call= lines. If I press =v= or =e=, they're
inserted verbatim.

Can you help me understand the 1^st point of these 4?  Thanks a lot!!

Best regards,
  Seb

-- 
Sebastien Vauban




reply via email to

[Prev in Thread] Current Thread [Next in Thread]