pdf viewer dll for c# : How to add an image to a pdf file control application platform web page html wpf web browser postgresql-9.4-A4116-part2742

Chapter 40. PL/pgSQL - SQL Procedural Language
DELETE FROM cs_active_job;
INSERT INTO cs_active_job(job_id) VALUES (v_job_id);
BEGIN
INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, now());
EXCEPTION
WHEN unique_violation THEN ¸
-- don’t worry if it already exists
END;
END;
$$ LANGUAGE plpgsql;
˚
The syntax of
RAISE
is considerably different from Oracle’s statement, although the basic case
RAISE exception_name
works similarly.
¸
The exception names supported by PL/pgSQL are different from Oracle’s. The set of built-in
exception names is much larger (see Appendix A). There is not currently a way to declare user-
defined exception names, although you can throw user-chosen SQLSTATE values instead.
The main functional difference between this procedure and the Oracle equivalent is that the exclusive
lockon the
cs_jobs
table will be held untilthe calling transactioncompletes. Also, if the caller later
aborts (for example due to an error), the effects of this procedure will be rolled back.
40.12.2. Other Things to Watch For
This section explains a few other things to watch for when porting Oracle PL/SQL functions to Post-
greSQL.
40.12.2.1. Implicit Rollback after Exceptions
In PL/pgSQL, when an exception is caught by an
EXCEPTION
clause, all database changes since the
block’s
BEGIN
are automatically rolled back. That is, the behavior is equivalent to what you’d get in
Oracle with:
BEGIN
SAVEPOINT s1;
... code here ...
EXCEPTION
WHEN ... THEN
ROLLBACK TO s1;
... code here ...
WHEN ... THEN
ROLLBACK TO s1;
... code here ...
END;
If you are translating an Oracle procedure that uses
SAVEPOINT
and
ROLLBACK TO
in this style,
your task is easy: just omit the
SAVEPOINT
and
ROLLBACK TO
.If you have a procedure that uses
SAVEPOINT
and
ROLLBACK TO
in a different way then some actual thought will be required.
1088
How to add an image to a pdf file - insert images into PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sample C# code to add image, picture, logo or digital photo into PDF document page using PDF page editor control
adding image to pdf form; add a picture to a pdf document
How to add an image to a pdf file - VB.NET PDF insert image library: insert images into PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide VB.NET Programmers How to Add Images in PDF Document
add photo to pdf in preview; how to add picture to pdf
Chapter 40. PL/pgSQL - SQL Procedural Language
40.12.2.2.
EXECUTE
The PL/pgSQL versionof
EXECUTE
works similarly to thePL/SQLversion, but youhavetoremember
to use
quote_literal
and
quote_ident
as described in Section 40.5.4. Constructs of the type
EXECUTE ’SELECT
*
FROM $1’;
will not work reliably unless you use these functions.
40.12.2.3. Optimizing PL/pgSQL Functions
PostgreSQL gives you twofunctioncreationmodifiers tooptimizeexecution:“volatility” (whether the
function always returns the same resultwhengiven the same arguments) and “strictness” (whether the
function returns null if any argument is null). Consult the CREATE FUNCTION reference page for
details.
When making use of these optimization attributes, your
CREATE FUNCTION
statement might look
something like this:
CREATE FUNCTION foo(...) RETURNS integer AS $$
...
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
40.12.3. Appendix
This section contains the code for a set of Oracle-compatible
instr
functions that you can use to
simplify your porting efforts.
--
-- instr functions that mimic Oracle’s counterpart
-- Syntax: instr(string1, string2, [n], [m]) where [] denotes optional parameters.
--
-- Searches string1 beginning at the nth character for the mth occurrence
-- of string2.
If n is negative, search backwards.
If m is not passed,
-- assume 1 (search starts at first character).
--
CREATE FUNCTION instr(varchar, varchar) RETURNS integer AS $$
DECLARE
pos integer;
BEGIN
pos:= instr($1, $2, 1);
RETURN pos;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
CREATE FUNCTION instr(string varchar, string_to_search varchar, beg_index integer)
RETURNS integer AS $$
DECLARE
pos integer NOT NULL DEFAULT 0;
temp_str varchar;
beg integer;
length integer;
ss_length integer;
1089
VB.NET PDF Password Library: add, remove, edit PDF file password
This VB.NET example shows how to add PDF file password with access permission setting. passwordSetting.IsAssemble = True ' Add password to PDF file.
how to add image to pdf reader; adding jpg to pdf
C# PDF Password Library: add, remove, edit PDF file password in C#
This example shows how to add PDF file password with access permission setting. passwordSetting.IsAssemble = true; // Add password to PDF file.
add jpg to pdf preview; add picture pdf
Chapter 40. PL/pgSQL - SQL Procedural Language
BEGIN
IF beg_index > 0 THEN
temp_str := substring(string FROM beg_index);
pos := position(string_to_search IN temp_str);
IF pos = 0 THEN
RETURN 0;
ELSE
RETURN pos + beg_index - 1;
END IF;
ELSIF beg_index < 0 THEN
ss_length := char_length(string_to_search);
length := char_length(string);
beg := length + beg_index - ss_length + 2;
WHILE beg > 0 LOOP
temp_str := substring(string FROM beg FOR ss_length);
pos := position(string_to_search IN temp_str);
IF pos > 0 THEN
RETURN beg;
END IF;
beg := beg - 1;
END LOOP;
RETURN 0;
ELSE
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
CREATE FUNCTION instr(string varchar, string_to_search varchar,
beg_index integer, occur_index integer)
RETURNS integer AS $$
DECLARE
pos integer NOT NULL DEFAULT 0;
occur_number integer NOT NULL DEFAULT 0;
temp_str varchar;
beg integer;
i integer;
length integer;
ss_length integer;
BEGIN
IF beg_index > 0 THEN
beg := beg_index;
temp_str := substring(string FROM beg_index);
FOR i IN 1..occur_index LOOP
pos := position(string_to_search IN temp_str);
IF i = 1 THEN
beg := beg + pos - 1;
ELSE
beg := beg + pos;
1090
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
C# File: Split PDF; C# Page: Insert PDF pages; C# Page: Delete PDF pages; C# Read: PDF Image Extract; C# Write: Insert text into PDF; C# Write: Add Image to PDF;
add image in pdf using java; add multiple jpg to pdf
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
Scan image to PDF, tiff and various image formats. Get image information, such as its location, zonal information Able to edit, add, delete, move, and output PDF
acrobat insert image into pdf; how to add jpg to pdf file
Chapter 40. PL/pgSQL - SQL Procedural Language
END IF;
temp_str := substring(string FROM beg + 1);
END LOOP;
IF pos = 0 THEN
RETURN 0;
ELSE
RETURN beg;
END IF;
ELSIF beg_index < 0 THEN
ss_length := char_length(string_to_search);
length := char_length(string);
beg := length + beg_index - ss_length + 2;
WHILE beg > 0 LOOP
temp_str := substring(string FROM beg FOR ss_length);
pos := position(string_to_search IN temp_str);
IF pos > 0 THEN
occur_number := occur_number + 1;
IF occur_number = occur_index THEN
RETURN beg;
END IF;
END IF;
beg := beg - 1;
END LOOP;
RETURN 0;
ELSE
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
1091
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Convert smooth lines to curves. Detect and merge image fragments. Flatten visible layers. C#.NET DLLs: Compress PDF Document. Add necessary references:
add jpg to pdf file; how to add a jpeg to a pdf
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Reduce image resources: Since images are usually or large size, images size reducing can help to reduce PDF file size effectively.
how to add an image to a pdf file; add jpg to pdf
Chapter 41. PL/Tcl - Tcl Procedural Language
PL/Tcl is a loadable procedural language for the PostgreSQL database system that enables the Tcl
language
1
to be used to write functions and trigger procedures.
41.1. Overview
PL/Tcl offers most of the capabilities a function writer has in the C language, with a few restrictions,
and with the addition of the powerful string processing libraries that are available for Tcl.
One compelling good restriction is that everything is executed from within the safety of the context
of a Tcl interpreter. In addition to the limited command set of safe Tcl, only a few commands are
available to access the database via SPI and to raise messages via
elog()
.PL/Tcl provides no way
to access internals of the database server or to gain OS-level access under the permissions of the
PostgreSQL server process, as a C function can do. Thus, unprivileged database users can be trusted
to use this language; it does not give them unlimited authority.
The other notableimplementationrestriction is that Tclfunctions cannotbeusedtocreateinput/output
functions for new data types.
Sometimes it is desirable to write Tcl functions that are not restricted to safe Tcl. For example, one
might want a Tcl function that sends email. To handle these cases, there is a variant of PL/Tcl called
PL/TclU
(for untrusted Tcl). This is exactly the same language except that a full Tcl interpreter
is used. If PL/TclU is used, it must be installed as an untrusted procedural language so that only
database superusers can create functions in it. The writer of a PL/TclU function must take care that
the function cannot be used to do anything unwanted, since it will be able to do anything that could
be done by a user logged in as the database administrator.
The sharedobject codefor the PL/TclandPL/TclU call handlers is automaticallybuiltandinstalled in
the PostgreSQL library directory if Tclsupportis specifiedin the configuration step of the installation
procedure. To install PL/Tcl and/or PL/TclU in a particular database, use the
CREATE EXTENSION
command or the
createlang
program, for example
createlang pltcl
dbname
or
createlang
pltclu
dbname
.
41.2. PL/Tcl Functions and Arguments
To create a function in the PL/Tcl language, use the standard CREATE FUNCTION syntax:
CREATE FUNCTION
funcname
(
argument-types
) RETURNS
return-type
AS $$
# PL/Tcl function body
$$ LANGUAGE pltcl;
PL/TclU is the same, except that the language has to be specified as
pltclu
.
The body of the function is simply a piece of Tcl script. When the function is called, the argument
values are passed as variables
$1
...
$
n
to the Tcl script. The result is returned from the Tcl code in
the usual way, with a
return
statement.
For example, a function returning the greater of two integer values could be defined as:
CREATE FUNCTION tcl_max(integer, integer) RETURNS integer AS $$
if {$1 > $2} {return $1}
1. http://www.tcl.tk/
1092
VB.NET PDF Image Extract Library: Select, copy, paste PDF images
PDF SDK for .NET, VB.NET users are able to extract image from PDF page or file and specified DLLs for PDF Image Extraction in VB.NET. Add necessary references:
add photo to pdf reader; adding image to pdf in preview
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
PDF document splitting, PDF page reordering and PDF page image and text Add necessary references: In addition, C# users can append a PDF file to the end of a
how to add an image to a pdf; add photo pdf
Chapter 41. PL/Tcl - Tcl Procedural Language
return $2
$$ LANGUAGE pltcl STRICT;
Note the clause
STRICT
,which saves us from having to think about null input values: if a null value
is passed, the function will not be called at all, but will just return a null result automatically.
Ina nonstrict function, if the actual value of an argumentis null, the corresponding
$
n
variable will be
set to an empty string. To detect whether a particular argument is null, use the function
argisnull
.
For example, suppose that we wanted
tcl_max
with one null and one nonnull argument to return the
nonnull argument, rather than null:
CREATE FUNCTION tcl_max(integer, integer) RETURNS integer AS $$
if {[argisnull 1]} {
if {[argisnull 2]} { return_null }
return $2
}
if {[argisnull 2]} { return $1 }
if {$1 > $2} {return $1}
return $2
$$ LANGUAGE pltcl;
As shown above, to return a null value from a PL/Tcl function, execute
return_null
.This can be
done whether the function is strict or not.
Composite-type arguments are passed to the function as Tcl arrays. The element names of the array
are the attribute names of the composite type. If an attribute in the passed row has the null value, it
will not appear in the array. Here is an example:
CREATE TABLE employee (
name text,
salary integer,
age integer
);
CREATE FUNCTION overpaid(employee) RETURNS boolean AS $$
if {200000.0 < $1(salary)} {
return "t"
}
if {$1(age) < 30 && 100000.0 < $1(salary)} {
return "t"
}
return "f"
$$ LANGUAGE pltcl;
There is currently no support for returning a composite-type result value, nor for returning sets.
PL/Tcl does not currently have full support for domain types: it treats a domain the same as the
underlying scalar type. This means that constraints associated with the domain will not be enforced.
This is not an issue for function arguments, but it is a hazard if you declare a PL/Tcl function as
returning a domain type.
1093
Chapter 41. PL/Tcl - Tcl Procedural Language
41.3. Data Values in PL/Tcl
The argument values supplied to a PL/Tcl function’s code are simply the input arguments converted
to text form (just as if they had been displayed by a
SELECT
statement). Conversely, the
return
command willacceptanystringthatis acceptable inputformat for the function’s declaredreturn type.
So, within the PL/Tcl function, all values are just text strings.
41.4. Global Data in PL/Tcl
Sometimes it is useful to have some global data that is held between two calls to a function or is
shared between different functions. This is easily done in PL/Tcl, but there are some restrictions that
must be understood.
For security reasons, PL/Tcl executes functions called by any one SQL role in a separate Tcl inter-
preter for that role. This prevents accidental or malicious interference by one user with the behavior
of another user’s PL/Tcl functions. Each such interpreter will have its own values for any “global”
Tcl variables. Thus, two PL/Tcl functions will share the same global variables if and only if they
are executed by the same SQL role. In an application wherein a single session executes code under
multiple SQL roles (via
SECURITY DEFINER
functions, use of
SET ROLE
,etc) you may need to take
explicit steps to ensure that PL/Tcl functions can share data. To do that, make sure that functions that
should communicate are owned bythe same user, and mark them
SECURITY DEFINER
.You must of
course take care that such functions can’t be used to do anything unintended.
AllPL/TclUfunctions used ina session execute inthe sameTcl interpreter, which of courseis distinct
from the interpreter(s) used for PL/Tcl functions. So global data is automatically shared between
PL/TclU functions. This is not considereda securityriskbecause allPL/TclU functions execute at the
same trust level, namely that of a database superuser.
To help protect PL/Tcl functions from unintentionally interfering with each other, a global array is
made available to each function via the
upvar
command. The global name of this variable is the
function’s internal name, and the local name is
GD
.It is recommended that
GD
be used for persistent
private data of a function. Use regular Tcl globalvariables only for values that you specifically intend
to be shared among multiple functions. (Note that the
GD
arrays are only global within a particular
interpreter, so they do not bypass the security restrictions mentioned above.)
An example of using
GD
appears in the
spi_execp
example below.
41.5. Database Access from PL/Tcl
The following commands are available to access the database from the body of a PL/Tcl function:
spi_exec
?-count
n
? ?-array
name
?
command
?
loop-body
?
Executes an SQL command given as a string. An error in the command causes an error to be
raised. Otherwise, the return value of
spi_exec
is the number of rows processed (selected,
inserted, updated, or deleted) by the command, or zero if the command is a utility statement. In
addition, if the command is a
SELECT
statement, the values of the selected columns are placed
in Tcl variables as described below.
The optional
-count
value tells
spi_exec
the maximum number of rows to process in the
command. The effect of this is comparable to setting up a query as a cursor and then saying
FETCH
n
.
1094
Chapter 41. PL/Tcl - Tcl Procedural Language
If the command is a
SELECT
statement, the values of the result columns are placed into Tcl
variables named after the columns. If the
-array
option is given, the column values are instead
stored into the named associative array, with the column names used as array indexes.
If the commandis a
SELECT
statement and no
loop-body
scriptis given, thenonly the first row
of results are stored into Tcl variables; remaining rows, if any, are ignored. No storing occurs if
the query returns no rows. (This case can be detected by checking the result of
spi_exec
.) For
example:
spi_exec "SELECT count(
*
) AS cnt FROM pg_proc"
will set the Tcl variable
$cnt
to the number of rows in the
pg_proc
system catalog.
If the optional
loop-body
argument is given, it is a piece of Tcl script that is executed once for
each row in the query result. (
loop-body
is ignored if the given command is not a
SELECT
.)
The values of the current row’s columns are stored into Tcl variables before each iteration. For
example:
spi_exec -array C "SELECT
*
FROM pg_class" {
elog DEBUG "have table $C(relname)"
}
will print a log message for every row of
pg_class
.This feature works similarly to other Tcl
looping constructs; in particular
continue
and
break
work in the usual way inside the loop
body.
If a column of a query result is null, the target variable for it is “unset” rather than being set.
spi_prepare query typelist
Prepares and saves a query plan for later execution. The saved plan will be retained for the life
of the current session.
The query can use parameters, that is, placeholders for values to be supplied whenever the plan
is actually executed. In the querystring, refer to parameters bythe symbols
$1
...
$
n
.If the query
uses parameters, the names of the parameter types must be given as a Tcl list. (Write an empty
list for
typelist
if no parameters are used.)
Thereturnvaluefrom
spi_prepare
is a queryIDtobe used insubsequent calls to
spi_execp
.
See
spi_execp
for an example.
spi_execp
?-count
n
? ?-array
name
? ?-nulls
string
?
queryid
?
value-list
?
?
loop-body
?
Executes a query previously prepared with
spi_prepare
.
queryid
is the ID returned by
spi_prepare
.If the query references parameters, a
value-list
must be supplied. This is
aTcl list of actual values for the parameters. The list must be the same length as the parameter
type list previously given to
spi_prepare
.Omit
value-list
if the query has no parameters.
The optional value for
-nulls
is a string of spaces and
’n’
characters telling
spi_execp
which of the parameters are null values. If given, it must have exactly the same length as the
value-list
.If it is not given, all the parameter values are nonnull.
Except for the way in which the query and its parameters are specified,
spi_execp
works just
like
spi_exec
.The
-count
,
-array
,and
loop-body
options are the same, andso is the result
value.
Here’s an example of a PL/Tcl function usinga preparedplan:
CREATE FUNCTION t1_count(integer, integer) RETURNS integer AS $$
if {![ info exists GD(plan) ]} {
# prepare the saved plan on the first call
set GD(plan) [ spi_prepare \
"SELECT count(
*
) AS cnt FROM t1 WHERE num >= \$1 AND num <= \$2" \
1095
Chapter 41. PL/Tcl - Tcl Procedural Language
[ list int4 int4 ] ]
}
spi_execp -count 1 $GD(plan) [ list $1 $2 ]
return $cnt
$$ LANGUAGE pltcl;
We need backslashes insidethequerystringgivento
spi_prepare
toensure thatthe
$
n
markers
will be passed through to
spi_prepare
as-is, and not replaced by Tcl variable substitution.
spi_lastoid
Returns the OID of the row inserted by the last
spi_exec
or
spi_execp
,if the command was
asingle-row
INSERT
and the modified table contained OIDs. (If not, you get zero.)
quote string
Doubles all occurrences of single quote and backslashcharacters in the givenstring. This can be
used to safely quote strings that are to be inserted into SQL commands given to
spi_exec
or
spi_prepare
.For example, think about an SQL command string like:
"SELECT ’$val’ AS ret"
where the Tcl variable
val
actually contains
doesn’t
.This would result in the final command
string:
SELECT ’doesn’t’ AS ret
which would cause a parse error during
spi_exec
or
spi_prepare
. To work properly, the
submitted command should contain:
SELECT ’doesn”t’ AS ret
which can be formed in PL/Tcl using:
"SELECT ’[ quote $val ]’ AS ret"
One advantage of
spi_execp
is that you don’t have to quote parameter values like this, since
the parameters are never parsed as part of an SQL command string.
elog level msg
Emits a log or error message. Possible levels are
DEBUG
,
LOG
,
INFO
,
NOTICE
,
WARNING
,
ERROR
,
and
FATAL
.
ERROR
raises an error condition; if this is not trapped by the surrounding Tcl code,
the error propagates out to the calling query, causing the current transaction or subtransaction
to be aborted. This is effectively the same as the Tcl
error
command.
FATAL
aborts the trans-
action and causes the current session to shut down. (There is probably no good reason to use
this error level in PL/Tcl functions, but it’s provided for completeness.) The other levels only
generate messages of different priority levels. Whether messages of a particular priority are re-
ported to the client, written to the server log, or bothis controlled by the log_min_messages and
client_min_messages configuration variables. See Chapter 18 for more information.
41.6. Trigger Procedures in PL/Tcl
Trigger procedures can be written inPL/Tcl. PostgreSQL requires thata procedurethatis to be called
as a trigger must be declared as a function with no arguments and a return type of
trigger
.
The information from thetrigger manager is passedto the procedure bodyin the following variables:
$TG_name
The name of the trigger from the
CREATE TRIGGER
statement.
1096
Chapter 41. PL/Tcl - Tcl Procedural Language
$TG_relid
The object ID of the table that caused the trigger procedure to be invoked.
$TG_table_name
The name of the table that caused the trigger procedure to be invoked.
$TG_table_schema
The schema of the table that caused the trigger procedure to be invoked.
$TG_relatts
ATcl listof the tablecolumnnames, prefixed withanemptylistelement. So lookingup acolumn
name in the list with Tcl’s
lsearch
command returns the element’s number starting with 1 for
the first column, the same way the columns are customarily numbered in PostgreSQL. (Empty
listelements also appear in the positions of columns that have been dropped, so that the attribute
numbering is correct for columns to their right.)
$TG_when
The string
BEFORE
,
AFTER
,or
INSTEAD OF
,depending on the type of trigger event.
$TG_level
The string
ROW
or
STATEMENT
depending on the type of trigger event.
$TG_op
The string
INSERT
,
UPDATE
,
DELETE
,or
TRUNCATE
depending on the type of trigger event.
$NEW
An associative array containing the values of the new table row for
INSERT
or
UPDATE
actions,
or empty for
DELETE
.The array is indexed by column name. Columns that are null will not
appear in the array. This is not set for statement-level triggers.
$OLD
Anassociative array containing the values of the old table row for
UPDATE
or
DELETE
actions, or
emptyfor
INSERT
.The array is indexedby column name. Columns that are nullwill not appear
in the array. This is not set for statement-level triggers.
$args
ATcl list of the arguments to the procedure as given in the
CREATE TRIGGER
statement. These
arguments are also accessible as
$1
...
$
n
in the procedure body.
The return value from a trigger procedure can be one of the strings
OK
or
SKIP
,or a list as returned
by the
array get
Tcl command. If the return value is
OK
,the operation (
INSERT
/
UPDATE
/
DELETE
)
that fired the trigger will proceed normally.
SKIP
tells the trigger manager to silently suppress the
operation for this row. If a list is returned, it tells PL/Tcl to return a modified row to the trigger
manager. This is only meaningful for row-level
BEFORE INSERT
or
UPDATE
triggers for which the
modifiedrow willbe inserted instead of the one given in
$NEW
;or for row-level
INSTEAD OF INSERT
or
UPDATE
triggers where the returned row is used to support
INSERT RETURNING
and
UPDATE
RETURNING
commands. The returnvalue is ignored for other types of triggers.
Here’s a little example trigger procedure that forces an integer value in a table to keep track of the
number of updates that are performed on the row. For new rows inserted, the value is initialized to 0
and then incremented on every update operation.
CREATE FUNCTION trigfunc_modcount() RETURNS trigger AS $$
switch $TG_op {
1097
Documents you may be interested
Documents you may be interested