Adds a function string to a function-string class. Replication Server uses function strings to generate instructions for data servers.
create function string [replication_definition.]function[;function_string] for function_class [with overwrite] [scan 'input_template'] [output {language 'lang_output_template' | rpc 'execute procedure [@param_name=]{constant |?variable!mod?} [, [@param_name=] {constant |?variable!mod?}]...' | writetext [use primary log | with log | no log] | none}]
Functions have either function-string-class scope or replication definition scope. Functions that direct transaction control have function-string class scope. User-defined functions, and functions that modify data, have replication definition scope.
The text, unitext, or image column name for the replication definition.
Able to conform to the rules for identifiers.
Unique in the scope of the function.
Replication Server also uses the function string name in the generation of error messages.
These keywords and options appear in RPC output templates:
procedure – the name of the remote procedure to execute. It could be an Adaptive Server stored procedure, a procedure processed by an Open Server gateway RPC handler, or a registered procedure in an Open Server gateway. Refer to the Open Server Server-Library/C Reference Manual for information about processing RPCs in a gateway program.
@param_name – the name of an argument to the procedure, as defined by the procedure. If the @param_name = value form is used, parameters can be supplied in any order. If parameter names are omitted, parameter values must be supplied in the order defined in the remote procedure.
constant – a literal value with the datatype of the parameter it is assigned to.
?variable!mod? – variable is the placeholder for a run-time value. It can be a column name, the name of a system-defined variable, the name of a parameter in a user-defined function, or the name of a variable defined in an input template. The variable must refer to a value with the same datatype as the parameter it is assigned to. For a list of system-defined variables, see System-Defined Variables.
The mod portion of a variable name identifies the type of data the variable represents. The variable modifier is required for all variables and must be one of the following:
The following options appear in writetext output templates to specify the logging behavior of the text, unitext, or image column in the replicate database:
use primary log – logs the data in the replicate database, if the logging option was specified in the primary database.
with log – logs the data in the replicate database transaction log.
no log – does not log the data in the replicate database transaction log.
create function string rs_begin for sqlserver2_function_class output language 'begin transaction'
create function string rs_commit for sqlserver2_function_class output language 'execute sqlrs_update_lastcommit @origin = ?rs_origin!sys?, @origin_qid = ?rs_origin_qid!sys?, @secondary_qid = ?rs_secondary_qid!sys?; commit transaction'
create replication definition titles_rep with primary at LDS.pubs2 (title_id varchar(6), title varchar(80), type char(12), pub_id char(4), advance money, total_sales int, notes varchar(200), pubdate datetime, contract bit, price money) primary key (title_id) searchable columns (price)
create function string titles_rep.rs_insert for sqlserver2_function_class output language 'insert titles_rs values (?title_id!new?, ?title!new?, ?type!new?, ?pub_id!new?, ?advance!new?, ?total_sales!new?, ?notes!new?, ?pubdate!new?, ?contract!new?, ?price!new?)'
create function titles_rep.update_titles (@title_id varchar(6), title varchar(80), @price money)
create function string titles_rep.update_titles for sqlserver2_function_class output rpc 'execute update_titles @title_id = ?title_id!param?, @title = ?title!param?, @price = ?price!param?'
create function string titles_rep.rs_select;title_id_select for sqlserver2_function_class scan 'select * from titles where title_id = ?title_id!user?' output language 'select * from titles where title_id = ?title_id!user?'
create function string titles_rep.rs_select;price_range_select for sqlserver2_function_class scan 'select * from titles where price > ?price_min!user? and price < ?price_max!user?' output rpc 'execute titles_price_select ?price_min!user?, ?price_max!user?'
Use create function string to add a function string to a function-string class. Function strings contain the database-specific instructions needed by Replication Server to convert a function to a command for a database.
For an overview of functions, function strings, and function-string classes, see the Replication Server Administration Guide Volume 2.
Create or alter function strings for functions with class scope at the primary site for the function-string class. See create function string class for more information about the primary site for a function-string class.
Create or alter function strings for functions with replication definition scope, including user-defined functions, at the site where the replication definition was created. Each replication definition has its own set of function strings.
Replication Server distributes the new function string to qualifying sites through the replication system. The changes do not appear immediately at all such sites because of normal replication system lag time.
Some function strings are generated dynamically; they are not stored in the RSSD.
Function Strings and Function-String Classes
For each of the system-provided function-string classes in which a function will be used, and for each derived class that inherits from these classes, Replication Server generates a default function string for the function. This is true for both system functions and user-defined functions. (Default function strings for the rs_dumpdb and rs_dumptran functions are not provided. You only need to create them if you are using coordinated dumps.
Customize the function string in rs_sqlserver_function_class using alter function string. Customize the function string in user-created function-string classes using create function string.
For each user-created base function-string class in which the function will be used, and for each derived class in which you want to override the inherited function string, you must create a function string, using create function string.
Omitting the output clause instructs Replication Server to generate a function string in the same way that it generates function strings for the rs_sqlserver_function_class or rs_default_function_class function-string classes.
The default function string for a user-defined function is an invocation of a stored procedure where the name is the function name and the parameters are the function parameters. The stored procedure is executed as a language command, not as an RPC.
Function Strings and Replicate Minimal Columns
If you have specified replicate minimal columns for a replication definition, you cannot normally create non-default function strings for the rs_update, rs_delete, rs_get_textptr, rs_textptr_init, or rs_datarow_for_writetext system functions.
However, you can create non-default function strings for the rs_update and rs_delete functions if you use the rs_default_fs system variable within the function string. This variable represents the default function-string behavior. You can add additional commands to extend the function-string behavior.
See create replication definiton for more information about the replicate minimal columns option.
'insert authors (city, au_id, au_lname, au_fname) values (''Berkeley'', ?au_id!new?, ?au_lname!new?, ?au_fname!new?)'
Replication Server does not modify datatypes in these ways for modifiers that end in _raw.
Formatting for Function String Variables table summarizes how Replication Server formats each datatype for the modifiers that do not end in _raw:
Datatype | Formatting of Literals |
---|---|
bigint, int, smallint, tinyint, rs_address | Integer number |
unsigned bigint, unsigned int, unsigned smallint, unsigned tinyint | Unsigned Integer number |
decimal, numeric, identity | Exact decimal number |
float, real | Decimal number |
char, varchar | Enclosed in single quote character Adds single quote character to any instance of a single quote character Pads instances of backslash + newline characters |
unichar, univarchar | Unicode |
money, smallmoney | Adds the appropriate money symbol (dollar sign for U.S. English) |
date, time, datetime, smalldatetime | Enclosed in single quote characters Adds single quote character to any instance of a single quote character |
binary, timestamp, varbinary | Prefixed with 0x |
bit | 1 or 0 |
To represent a semicolon that should not be interpreted as a command separator, use two consecutive semicolons (;;).
If the connection to the database is not configured to allow batches, Replication Server sends the commands in the function string to the data server one at a time. To enable or disable batching for a database, use alter connection.
Replication Server System-Defined Variables table list the system-defined variables that can be used in function-string output templates. Use the sys or sys_raw modifier for these variables.
System Variable | Datatype | Description |
---|---|---|
rs_default_fs | text | The default generated function-string text for the function |
rs_deliver_as_name | varchar(200) | For execution of a replicated function, name of the procedure to be invoked at the destination |
rs_destination_db | varchar(30) | Name of the database where a transaction was sent |
rs_destination_ds | varchar(30) | Name of the data server where a transaction was sent |
rs_destination_ldb | varchar(30) | Name of the logical database where a transaction was sent |
rs_destination_lds | varchar(30) | Name of the logical data server where a transaction was sent |
rs_destination_ptype | char(1) | Physical connection type (“A” for active or “S” for standby) for the database where a transaction was sent |
rs_destination_user | varchar(30) | User who will execute the transaction at the destination |
rs_dump_dbname | varchar(30) | Name of the database where a database or transaction dump originated |
rs_dump_label | varchar(30) | Label information for a database or transaction dump. For Adaptive Server, this variable holds a datetime value that is the time the dump originated. |
rs_dump_status | int(4) | Dump status indicator:
|
rs_dump_timestamp | varbinary(16) | Timestamp of a database or transaction dump |
rs_lorigin | int(4) | ID of the originating logical database for a transaction |
rs_isolation_level | varchar(30) | Transaction isolation level of a database connection. |
rs_origin | int(4) | ID of the originating database for a transaction |
rs_origin_begin_time | datetime | The time that a command was applied at the origin
Note: If you execute select getdate() while ASE is still processing
user database recovery, the returned value of select getdate() may
be different from the value of rs_origin_begin_time.
|
rs_origin_commit_time | datetime | The time that a transaction was committed at the origin
Note: If you execute select getdate() while ASE is still processing
user database recovery, the returned value of select getdate() may
be different from the value of rs_origin_begin_time.
|
rs_origin_db | varchar(30) | Name of the origin database |
rs_origin_ds | varchar(30) | Name of the origin data server |
rs_origin_ldb | varchar(30) | Name of the logical database for a warm standby application |
rs_origin_lds | varchar(30) | Name of the logical data server for a warm standby application |
rs_origin_qid | varbinary(36) | Origin queue ID of the first command in a transaction |
rs_origin_user | varchar(30) | User who executed the transaction at the origin |
rs_origin_xact_id | binary(120) | The system-assigned unique ID of a transaction |
rs_origin_xact_name | varchar(30) | User-assigned name of the transaction at origin |
rs_repl_objowner | varchar | Owner of the replicate object |
rs_secondary_qid | varbinary(36) | Queue ID of a transaction in a subscription materialization or dematerialization queue |
rs_last_text_chunk | int(4) | If the value is 0, this is not the last chunk of text data. If the value is 1, this is the last chunk of text data. |
rs_writetext_log | int(4) | If the value is 0, rs_writetext has not finished logging text, unitext, and image data at the primary database transaction log. If the value is 1, rs_writetext has finished logging text, unitext, and image data at the primary database transaction log. |
If you are not using parallel DSI to process large transactions before their commit has been read from the DSI queue, the value of the rs_origin_commit_time system variable contains the time when the last transaction in the transaction group committed at the primary site.
If you are using parallel DSI to process large transactions before their commit has been read from the DSI queue, when the DSI threads start processing one of these transactions, the value of the rs_origin_commit_time system variable is set to the value of the rs_origin_begin_time system variable.
When the commit statement for the transaction is read, the value of rs_origin_commit_time is set to the actual commit time. Therefore, when the configuration parameter dsi_num_large_xact_threads is set to a value greater than zero, the value for rs_origin_commit_time is not reliable for any system function other than rs_commit.
System Variables and NULL Values
begin transaction NULL
'begin transaction t_?rs_origin_xact_name!sys_raw?'
If the rs_origin_xact_name system variable is null, the transaction name will be “t_NULL”.
Replacing Function Strings