[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] [babel] Expand code is failing on a #+call line
From: |
Eric Schulte |
Subject: |
Re: [O] [babel] Expand code is failing on a #+call line |
Date: |
Thu, 20 Oct 2011 09:48:13 -0600 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.90 (gnu/linux) |
Hi Seb,
This is a minor point, but would you mind structuring your emails with
an introduction of pure-prose (no embedded examples), saving the
examples for the end (footnotes work well for this). I often find it
disjointing to try to ingest large code example while simultaneously
trying to figure out the high-level point of the email.
As to this specific question... I am not sure where you are trying to
expand a code block. It seems as if you are trying to expand a call
line, but I do not believe that is supposed to be possible.
Best -- Eric
"Sebastien Vauban" <address@hidden> writes:
> 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
--
Eric Schulte
http://cs.unm.edu/~eschulte/