annotate main/database/inst/pq_lo_view.m @ 12720:52ca082757c2 octave-forge tip

Update copyright notices.
author i7tiol
date Sat, 27 Feb 2016 11:21:29 +0000
parents b9544a96bc8d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12720
52ca082757c2 Update copyright notices.
i7tiol
parents: 12097
diff changeset
1 ## Copyright (C) 2013-2016 Olaf Till <i7tiol@t-online.de>
12097
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
2 ##
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
3 ## This program is free software; you can redistribute it and/or modify it under
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
4 ## the terms of the GNU General Public License as published by the Free Software
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
5 ## Foundation; either version 3 of the License, or (at your option) any later
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
6 ## version.
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
7 ##
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
8 ## This program is distributed in the hope that it will be useful, but WITHOUT
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
9 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
10 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
11 ## details.
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
12 ##
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
13 ## You should have received a copy of the GNU General Public License along with
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
14 ## this program; if not, see <http://www.gnu.org/licenses/>.
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
15
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
16 ## -*- texinfo -*-
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
17 ## @deftypefn {Function File} pq_lo_view (@var{connection}, @var{oid}, @var{viewer})
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
18 ##
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
19 ## Exports the large object of Oid @var{oid} in the database associated
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
20 ## with @var{connection} to a temporary file and starts the program
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
21 ## @var{viewer} in the background with the name of the temporary file as
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
22 ## argument.
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
23 ##
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
24 ## The temporary file will be removed after termination of the viewer.
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
25 ##
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
26 ## @end deftypefn
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
27
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
28 function pq_lo_view (conn, oid, viewer)
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
29
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
30 if (nargin () != 3 || ! ischar (viewer) || rows (viewer) != 1)
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
31 print_usage ();
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
32 endif
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
33
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
34 if (([opid, omsg] = fork ()) == 0)
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
35 ## outer child
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
36
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
37 unwind_protect
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
38
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
39 if (([vpid, vmsg] = fork ()) == 0)
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
40 ## child for viewer
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
41
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
42 unwind_protect
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
43
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
44 ## We don't rely on Octave to delete the tempfile since we
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
45 ## perform a "shortcut" exit from Octave in the child.
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
46 if (([~, tname, msg] = mkstemp ...
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
47 (fullfile (P_tmpdir (), "octave-pq_lo_view-XXXXXX"))) == -1)
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
48 error ("could not make temporary file: %s", msg);
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
49 endif
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
50
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
51 unwind_protect
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
52
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
53 ## throws an error for errors
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
54 pq_lo_export (conn, oid, tname);
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
55
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
56 if (system (sprintf ("%s %s", viewer, tname)) != 0)
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
57 error ("error in execution of viewer program or viewer terminated by a signal");
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
58 endif
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
59
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
60 unwind_protect_cleanup
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
61
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
62 unlink (tname);
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
63
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
64 end_unwind_protect
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
65
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
66 unwind_protect_cleanup
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
67
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
68 __pq_internal_exit__ ();
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
69
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
70 end_unwind_protect
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
71
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
72 elseif (vpid < 0)
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
73 ## fork for viewer went wrong
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
74 error ("error in fork for viewer process: %s", vmsg);
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
75 endif
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
76
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
77 unwind_protect_cleanup
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
78
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
79 __pq_internal_exit__ ();
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
80
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
81 end_unwind_protect
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
82
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
83 elseif (opid < 0)
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
84 ## fork for outer child went wrong
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
85 error ("error in fork for outer child: %s", omsg);
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
86 endif
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
87
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
88 ## parent
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
89 waitpid (opid);
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
90
b9544a96bc8d support viewing large objects with viewers needing a temporary file
i7tiol
parents:
diff changeset
91 endfunction