Database
Inclusion code:
Service Deployment | |||
---|---|---|---|
Port Name | Location | Protocol | Interfaces |
Database documentation: | |||
Database | - | - | DatabaseInterface |
List of Available Interfaces
DatabaseInterface
Interface documentation:
Operation Name | Input Type | Output Type | Faults |
---|---|---|---|
checkConnection | void | void | ConnectionError( undefined ) |
query | QueryRequest | QueryResult | SQLException( undefined ) ConnectionError( undefined ) |
executeTransaction | DatabaseTransactionRequest | DatabaseTransactionResult | SQLException( undefined ) ConnectionError( undefined ) |
update | UpdateRequest | int | SQLException( undefined ) ConnectionError( undefined ) |
close | void | void | |
connect | ConnectionInfo | void | InvalidDriver( undefined ) ConnectionError( undefined ) DriverClassNotFound( undefined ) |
Operation Description
checkConnection
Operation documentation: Checks the connection with the database. Throws ConnectionError if the connection is not functioning properly.
Invocation template:
checkConnection@Database( request )( response )
Request type
Type: void
void : void
Response type
Type: void
void : void
Possible faults thrown
Fault ConnectionError
with type undefined
Fault-handling install template:
install ( ConnectionError => /* error-handling code */ )
query
Operation documentation: Queries the database and returns a result set
Example with SQL parameters:
queryRequest =
"SELECT city, country, data FROM weather " +
"WHERE city=:city AND country=:country";
queryRequest.city = City;
queryRequest.country = Country;
query@Database( queryRequest )( queryResponse );
_template:
Field _template allows for the definition of a specific output template.
Assume, e.g., to have a table with the following columns:
| col1 | col2 | col3 | col4 |
If _template is not used the output will be rows with the following format:
row
|-col1
|-col2
|-col3
|-col4
Now let us suppose we would like to have the following structure for each row:
row
|-mycol1 contains content of col1
|-mycol2 contains content of col2
|-mycol3 contains content of col3
|-mycol4 contains content of col4
In order to achieve this, we can use field _template as it follows:
with( query_request._template ) {
.mycol1 = "col1";
.mycol1.mycol2 = "col2";
.mycol1.mycol2.mycol3 = "col3";
.mycol4 = "col4"
}
_template does not currently support vectors.
Invocation template:
query@Database( request )( response )
Request type
Type: QueryRequest
type QueryRequest: undefined
QueryRequest : string
Response type
Type: QueryResult
type QueryResult: void {
.row*: undefined
}
QueryResult : void
row : void
Possible faults thrown
Fault SQLException
with type undefined
Fault-handling install template:
install ( SQLException => /* error-handling code */ )
Fault ConnectionError
with type undefined
Fault-handling install template:
install ( ConnectionError => /* error-handling code */ )
executeTransaction
Operation documentation: Executes more than one database command in a single transaction
Invocation template:
executeTransaction@Database( request )( response )
Request type
Type: DatabaseTransactionRequest
type DatabaseTransactionRequest: void {
.statement[1,2147483647]: undefined
}
DatabaseTransactionRequest : void
statement : string
Response type
Type: DatabaseTransactionResult
type DatabaseTransactionResult: void {
.result*: TransactionQueryResult
}
DatabaseTransactionResult : void
result : int
Possible faults thrown
Fault SQLException
with type undefined
Fault-handling install template:
install ( SQLException => /* error-handling code */ )
Fault ConnectionError
with type undefined
Fault-handling install template:
install ( ConnectionError => /* error-handling code */ )
update
Operation documentation: Updates the database and returns a single status code
Example with SQL parameters:
updateRequest =
"INSERT INTO weather(city, country, data) " +
"VALUES (:city, :country, :data)";
updateRequest.city = City;
updateRequest.country = Country;
updateRequest.data = r;
update@Database( updateRequest )( ret )
Invocation template:
update@Database( request )( response )
Request type
Type: UpdateRequest
type UpdateRequest: undefined
UpdateRequest : string
Response type
Type: int
int : int
Possible faults thrown
Fault SQLException
with type undefined
Fault-handling install template:
install ( SQLException => /* error-handling code */ )
Fault ConnectionError
with type undefined
Fault-handling install template:
install ( ConnectionError => /* error-handling code */ )
close
Operation documentation: Explicitly closes a database connection Per default the close happens on reconnect or on termination of the Database service, eg. when the enclosing program finishes.
Invocation template:
close@Database( request )( response )
Request type
Type: void
void : void
Response type
Type: void
void : void
connect
Operation documentation: Connects to a database and eventually closes a previous connection
Example with HSQLDB:
with ( connectionInfo ) {
.username = "sa";
.password = "";
.host = "";
.database = "file:weatherdb/weatherdb"; // "." for memory-only
.driver = "hsqldb_embedded"
};
connect@Database( connectionInfo )( void );
Invocation template:
connect@Database( request )( response )
Request type
Type: ConnectionInfo
type ConnectionInfo: void {
.database: string
.password: string
.checkConnection?: int
.driver: string
.port?: int
.toLowerCase?: bool
.host: string
.toUpperCase?: bool
.attributes?: string
.username: string
}
ConnectionInfo : void
database : string
password : string
checkConnection : int
driver : string
port : int
toLowerCase : bool
host : string
toUpperCase : bool
attributes : string
username : string
Response type
Type: void
void : void
Possible faults thrown
Fault InvalidDriver
with type undefined
Fault-handling install template:
install ( InvalidDriver => /* error-handling code */ )
Fault ConnectionError
with type undefined
Fault-handling install template:
install ( ConnectionError => /* error-handling code */ )
Fault DriverClassNotFound
with type undefined
Fault-handling install template:
install ( DriverClassNotFound => /* error-handling code */ )
Subtypes
TransactionQueryResult
type TransactionQueryResult: int { .row*: undefined }