emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Eric Schulte <schulte.eric@gmail.com>
To: Sebastien Vauban <wxhgmqzgwmuf@spammotel.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: [babel] Expand code is failing on a #+call line
Date: Thu, 20 Oct 2011 11:52:48 -0600	[thread overview]
Message-ID: <87aa8vk0sv.fsf@gmail.com> (raw)
In-Reply-To: <80y5wfwrko.fsf@somewhere.org> (Sebastien Vauban's message of "Thu, 20 Oct 2011 18:33:43 +0200")

>
>> 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.
>
> As for any other code block, all I want is to see its expanded (instantiated)
> version before I run it.
>
> Is this not doable when you call the code block remotely (I mean: from
> a #+call line, instead of from the code block itself)?
>

That is correct.  There is no reason (that I can think of at the moment)
why this functionality could not be added, but currently the code block
preview functionality expects to be called from within a code block.

>
> If not, does that mean we better not put code block into the lob, when we're
> interested by having a look at their expanded form?
>

Yes, given the current state of affairs that is correct.

Best -- Eric

>
> Best regards,
>   Seb
>
>> "Sebastien Vauban" <wxhgmqzgwmuf@spammotel.com> 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!!

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/

      reply	other threads:[~2011-10-20 17:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-20 15:12 [babel] Expand code is failing on a #+call line Sebastien Vauban
2011-10-20 15:48 ` Eric Schulte
2011-10-20 16:33   ` Sebastien Vauban
2011-10-20 17:52     ` Eric Schulte [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87aa8vk0sv.fsf@gmail.com \
    --to=schulte.eric@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=wxhgmqzgwmuf@spammotel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).