Repository: MarketSquare/Robotframework-Database-Library

Issue:
Use Python convention naming
According to PEP8, Python uses snake_case naming for arguments. We follow Java-style camelCase instead:

```
def query(self, selectStatement, sansTran=False, returnAsDict=False):
```

Ideally, we should rename it to follow Python style. But because of the breaking nature of the change, I consider it as a low priority, low return change - so it's up to discussion. To help with deprecation period we could introduce special decorator that would catch 'old' names and warn users on rename:

```

def renamed_args():
    decorator that will change kwargs from old name to new name and warn user they need to update the code


@renamed_args(mapping={"selectStatement": "select_statement", ...})
def query(self, select_statement, sans_trans=False, return_as_dict=False):
```

Discussion:
@amochin: Done in version 2.0.0

Solution patch:
diff --git a/README.md b/README.md
index 6ab6327..f59438a 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ It requires an appropriate **Python module to be installed separately** - depend
 The library consists of some keywords designed to perform different checks on your database.
 Here you can find the [keyword docs](http://marketsquare.github.io/Robotframework-Database-Library/).
 
-Wath the [talk at Robocon 2024 about the Database Library update](https://youtu.be/A96NTUps8sU)
+Wath the [talk at Robocon 2024 about the Database Library update](https://youtu.be/A96NTUps8sU).
 
 [![Talk at Robocon 2024 about the Database Library update](http://img.youtube.com/vi/A96NTUps8sU/0.jpg)](https://youtu.be/A96NTUps8sU)
 
@@ -18,8 +18,7 @@ Wath the [talk at Robocon 2024 about the Database Library update](https://youtu.
 ```
 pip install robotframework-databaselibrary
 ```
-# Usage examples
-## Basic usage
+# Basic usage examples
 ```RobotFramework
 *** Settings ***
 Library       DatabaseLibrary
@@ -29,25 +28,40 @@ Test Setup    Connect To My Oracle DB
 Connect To My Oracle DB
     Connect To Database
     ...    oracledb
-    ...    dbName=db
-    ...    dbUsername=my_user
-    ...    dbPassword=my_pass
-    ...    dbHost=127.0.0.1
-    ...    dbPort=1521
+    ...    db_name=db
+    ...    db_user=my_user
+    ...    db_password=my_pass
+    ...    db_host=127.0.0.1
+    ...    db_port=1521
 
 *** Test Cases ***
+Get All Names
+    ${Rows}=    Query    select FIRST_NAME, LAST_NAME from person
+    Should Be Equal    ${Rows}[0][0]    Franz Allan
+    Should Be Equal    ${Rows}[0][1]    See
+    Should Be Equal    ${Rows}[1][0]    Jerry
+    Should Be Equal    ${Rows}[1][1]    Schneider
+
 Person Table Contains Expected Records
-    ${output}=    Query    select LAST_NAME from person
-    Length Should Be    ${output}    2
-    Should Be Equal    ${output}[0][0]    See
-    Should Be Equal    ${output}[1][0]    Schneider
+    ${sql}=    Catenate    select LAST_NAME from person
+    Check Query Result    ${sql}    contains    See
+    Check Query Result    ${sql}    equals      Schneider    row=1
+
+Wait Until Table Gets New Record
+    ${sql}=    Catenate    select LAST_NAME from person
+    Check Row Count    ${sql}    >    2    retry_timeout=5s
 
 Person Table Contains No Joe
     ${sql}=    Catenate    SELECT id FROM person
-    ...                    WHERE FIRST_NAME= 'Joe'    
-    Check If Not Exists In Database    ${sql}
+    ...                    WHERE FIRST_NAME= 'Joe'
+    Check Row Count    ${sql}   ==    0
 ```
-## Handling multiple database connections
+See more examples in the folder `tests`.
+
+# Handling multiple database connections
+The library can handle multiple connections to different databases using *aliases*.
+An alias is set while creating a connection and can be passed to library keywords in a corresponding argument.
+## Example
 ```RobotFramework
 *** Settings ***
 Library          DatabaseLibrary
@@ -56,9 +70,21 @@ Test Teardown    Disconnect From All Databases
 
 *** Keywords ***
 Connect To All Databases
-    Connect To Database    psycopg2    db    db_user    pass    127.0.0.1    5432
+    Connect To Database
+    ...    psycopg2
+    ...    db_name=db
+    ...    db_user=db_user
+    ...    db_password=pass
+    ...    db_host=127.0.0.1
+    ...    db_port=5432
     ...    alias=postgres
-    Connect To Database    pymysql    db    db_user    pass    127.0.0.1    3306
+    Connect To Database
+    ...    pymysql
+    ...    db_name=db
+    ...    db_user=db_user
+    ...    db_password=pass
+    ...    db_host=127.0.0.1
+    ...    db_port=3306
     ...    alias=mysql
 
 *** Test Cases ***
@@ -73,7 +99,130 @@ Switching Default Alias
     Execute Sql String    drop table XYZ
 ```
 
-See more examples in the folder `tests`.
+
+
+# Using configuration file
+The `Connect To Database` keyword allows providing the connection parameters in two ways:
+- As keyword arguments
+- In a configuration file - a simple list of _key=value_ pairs, set inside an _alias_ section.
+
+You can use only one way or you can combine them:
+- The keyword arguments are taken by default
+- If no keyword argument is provided, a parameter value is searched in the config file
+
+Along with commonly used connection parameters, named exactly as keyword arguments, a config file
+can contain any other DB module specific parameters as key/value pairs.
+If same custom parameter is provided both as a keyword argument *and* in config file,
+the *keyword argument value takes precedence*.
+
+The path to the config file is set by default to `./resources/db.cfg`.
+You can change it using an according parameter in the `Connect To Database` keyword.
+
+A config file *must* contain at least one section name -
+the connection alias, if used (see [Handling multiple database connections](#handling-multiple-database-connections)), or
+`[default]` if no aliases are used.
+
+## Config file examples 
+### Config file with default alias (equal to using no aliases at all)
+```
+[default]
+db_module=psycopg2
+db_name=yourdbname
+db_user=yourusername
+db_password=yourpassword
+db_host=yourhost
+db_port=yourport
+```
+### Config file with a specific alias
+```
+[myoracle]
+db_module=oracledb
+db_name=yourdbname
+db_user=yourusername
+db_password=yourpassword
+db_host=yourhost
+db_port=yourport
+```
+
+### Config file with some params only
+```
+[default]
+db_password=mysecret
+```
+### Config file with some custom DB module specific params
+```
+[default]
+my_custom_param=value
+```
+
+# Inline assertions
+Keywords, that accept arguments ``assertion_operator`` and ``expected_value``,
+perform a check according to the specified condition - using the [Assertion Engine](https://github.com/MarketSquare/AssertionEngine).
+
+## Examples
+```RobotFramework
+Check Row Count     SELECT id FROM person          ==        2
+Check Query Result  SELECT first_name FROM person  contains  Allan
+```
+
+# Retry mechanism
+Assertion keywords, that accept arguments ``retry_timeout`` and ``retry_pause``, support waiting for assertion to pass.
+
+Setting the ``retry_timeout`` argument enables the mechanism -
+in this case the SQL request and the assertion are executed in a loop,
+until the assertion is passed or the ``retry_timeout`` is reached.
+The pause between the loop iterations is set using the ``retry_pause`` argument.
+
+The argument values are set in [Robot Framework time format](http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#time-format) - e.g. ``5 seconds``.
+
+The retry mechanism is disabled by default - ``retry_timeout`` is set to ``0``.
+
+## Examples
+```RobotFramework
+${sql}=   Catenate    SELECT first_name FROM person
+Check Row Count     ${sql}  ==        2      retry_timeout=10 seconds
+Check Query Result  ${sql}  contains  Allan  retry_timeout=5s  retry_pause=1s
+````
+
+# Logging query results
+Keywords, that fetch results of a SQL query, print the result rows as a table in RF log.
+- A log head limit of *50 rows* is applied, other table rows are truncated in the log message.
+- The limit and the logging in general can be adjusted any time in your tests using the Keyword `Set Logging Query Results`.
+
+You can also setup the limit or disable the logging during the library import.
+## Examples
+```RobotFramework
+*** Settings ***
+# Default behavior - logging of query results is enabled, log head is 50 rows.
+Library    DatabaseLibrary
+
+# Logging of query results is disabled, log head is 50 rows (default).
+Library    DatabaseLibrary    log_query_results=False
+
+# Logging of query results is enabled (default), log head is 10 rows.
+Library    DatabaseLibrary    log_query_results_head=10
+
+# Logging of query results is enabled (default), log head limit is disabled (log all rows).
+Library    DatabaseLibrary    log_query_results_head=0
+````
+
+# Commit behavior
+While creating a database connection, the library doesn't explicitly set the _autocommit_ behavior -
+so the default value of the Python DB module is used.
+According to Python DB API specification it should be disabled by default -
+which means each SQL transaction must contain a dedicated commit statement, if necessary.
+
+The library manages it for you:
+- Keywords like `Execute SQL String` perform automatically a commit after running the query - or a rollback in case of error
+- Keywords like `Query` don't perform a commit, but also do a rollback in case of error
+
+You can turn off this automatic commit/rollback behavior using the ``no_transaction`` parameter.
+See docs of a particular keyword.
+
+It's also possible to explicitly set the _autocommit_ behavior on the Python DB module level -
+using the `Set Auto Commit` keyword.
+This has no impact on the automatic commit/rollback behavior in library keywords (described above).
+
 # Database modules compatibility
 The library is basically compatible with any [Python Database API Specification 2.0](https://peps.python.org/pep-0249/) module.
 
@@ -83,7 +232,7 @@ Therefore there are some modules, which are "natively" supported in the library
 ## Python modules currently "natively" supported
 ### Oracle
 - [oracledb](https://oracle.github.io/python-oracledb/)
-    - Both thick and thin client modes are supported - you can select one using the `driverMode` parameter.
+    - Both thick and thin client modes are supported - you can select one using the `oracle_driver_mode` parameter.
     - However, due to current limitations of the oracledb module, **it's not possible to switch between thick and thin modes during a test execution session** - even in different suites.
 - [cx_Oracle](https://oracle.github.io/python-cx_Oracle/)
 ### MySQL
diff --git a/doc/index.html b/doc/index.html
index bed2160..b82912c 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -1191,7 +1191,7 @@ window.util = function () {
 jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a<e.childNodes.length;a++){a+=jQuery.highlight(e.childNodes[a],t,n,r)}}return 0}});jQuery.fn.unhighlight=function(e){var t={className:"highlight",element:"span"};jQuery.extend(t,e);return this.find(t.element+"."+t.className).each(function(){var e=this.parentNode;e.replaceChild(this.firstChild,this);e.normalize()}).end()};jQuery.fn.highlight=function(e,t){var n={className:"highlight",element:"span",caseSensitive:false,wordsOnly:false};jQuery.extend(n,t);if(e.constructor===String){e=[e]}e=jQuery.grep(e,function(e,t){return e!=""});e=jQuery.map(e,function(e,t){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")});if(e.length==0){return this}var r=n.caseSensitive?"":"i";var i="("+e.join("|")+")";if(n.wordsOnly){i="\\b"+i+"\\b"}var s=new RegExp(i,r);return this.each(function(){jQuery.highlight(this,s,n.element,n.className)})}
 </script>
 <script type="text/javascript">
-libdoc = {"specversion": 3, "name": "DatabaseLibrary", "doc": "<p>The Database Library for <a href=\"https://robotframework.org\">Robot Framework</a> allows you to query a database and verify the results. It requires an appropriate <b>Python module to be installed separately</b> - depending on your database, like e.g. <span class=\"name\">oracledb</span> or <span class=\"name\">pymysql</span>.</p>\n<h3 id=\"Table of contents\">Table of contents</h3>\n<ul>\n<li><a href=\"#Requirements\" class=\"name\">Requirements</a></li>\n<li><a href=\"#Installation\" class=\"name\">Installation</a></li>\n<li><a href=\"#Usage%20example\" class=\"name\">Usage example</a></li>\n<li><a href=\"#Using%20configuration%20file\" class=\"name\">Using configuration file</a></li>\n<li><a href=\"#Inline%20assertions\" class=\"name\">Inline assertions</a></li>\n<li><a href=\"#Retry%20mechanism\" class=\"name\">Retry mechanism</a></li>\n<li><a href=\"#Logging%20query%20results\" class=\"name\">Logging query results</a></li>\n<li><a href=\"#Database%20modules%20compatibility\" class=\"name\">Database modules compatibility</a></li>\n<li><a href=\"#Importing\" class=\"name\">Importing</a></li>\n<li><a href=\"#Keywords\" class=\"name\">Keywords</a></li>\n</ul>\n<h2 id=\"Requirements\">Requirements</h2>\n<ul>\n<li>Python</li>\n<li>Robot Framework</li>\n<li>Python database module you're going to use - e.g. <span class=\"name\">oracledb</span></li>\n</ul>\n<h2 id=\"Installation\">Installation</h2>\n<pre>\npip install robotframework-databaselibrary\n</pre>\n<p>Don't forget to install the required Python database module!</p>\n<h2 id=\"Usage example\">Usage example</h2>\n<h3 id=\"Basic usage\">Basic usage</h3>\n<pre>\n<b>*</b> Settings <b>*</b>\nLibrary       DatabaseLibrary\nTest Setup    Connect To My Oracle DB\n\n<b>*</b> Keywords <b>*</b>\nConnect To My Oracle DB\n    Connect To Database\n    ...    oracledb\n    ...    dbName=db\n    ...    dbUsername=my_user\n    ...    dbPassword=my_pass\n    ...    dbHost=127.0.0.1\n    ...    dbPort=1521\n\n<b>*</b> Test Cases <b>*</b>\nPerson Table Contains Expected Records\n    ${output}=    Query    select LAST_NAME from person\n    Length Should Be    ${output}    2\n    Should Be Equal    ${output}[0][0]    See\n    Should Be Equal    ${output}[1][0]    Schneider\n\nPerson Table Contains No Joe\n    ${sql}=    Catenate    SELECT id FROM person\n    ...                    WHERE FIRST_NAME= 'Joe'\n    Check If Not Exists In Database    ${sql}\n\n</pre>\n<h3 id=\"Handling multiple database connections\">Handling multiple database connections</h3>\n<pre>\n<b>*</b> Settings <b>*</b>\nLibrary          DatabaseLibrary\nTest Setup       Connect To All Databases\nTest Teardown    Disconnect From All Databases\n\n<b>*</b> Keywords <b>*</b>\nConnect To All Databases\n    Connect To Database    psycopg2    db    db_user    pass    127.0.0.1    5432\n    ...    alias=postgres\n    Connect To Database    pymysql    db    db_user    pass    127.0.0.1    3306\n    ...    alias=mysql\n\n<b>*</b> Test Cases <b>*</b>\nUsing Aliases\n    ${names}=    Query    select LAST_NAME from person    alias=postgres\n    Execute Sql String    drop table XYZ                  alias=mysql\n\nSwitching Default Alias\n    Switch Database    postgres\n    ${names}=    Query    select LAST_NAME from person\n    Switch Database    mysql\n    Execute Sql String    drop table XYZ\n\n</pre>\n<h2 id=\"Using configuration file\">Using configuration file</h2>\n<p>The <a href=\"#Connect%20To%20Database\" class=\"name\">Connect To Database</a> keyword allows providing the connection parameters in two ways:</p>\n<ul>\n<li>As keyword arguments</li>\n<li>In a configuration file - a simple list of <i>key=value</i> pairs, set inside an <i>alias</i> section.</li>\n</ul>\n<p>You can use only one way or you can combine them:</p>\n<ul>\n<li>The keyword arguments are taken by default</li>\n<li>If no keyword argument is provided, a parameter value is searched in the config file</li>\n</ul>\n<p>Along with commonly used connection parameters, named exactly as keyword arguments, a config file can contain any other DB module specific parameters as key/value pairs. If same custom parameter is provided both as a keyword argument <b>and</b> in config file, the <b>keyword argument value takes precedence</b>.</p>\n<p>The path to the config file is set by default to <span class=\"name\">./resources/db.cfg</span>. You can change it using an according parameter in the <a href=\"#Connect%20To%20Database\" class=\"name\">Connect To Database</a> keyword.</p>\n<p>A config file <b>must</b> contain at least one section name - the connection alias, if used (see <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>), or <span class=\"name\">[default]</span> if no aliases are used.</p>\n<h3 id=\"Config file examples\">Config file examples</h3>\n<h4 id=\"Config file with default alias (equal to using no aliases at all)\">Config file with default alias (equal to using no aliases at all)</h4>\n<pre>\n[default]\ndbapiModuleName=psycopg2\ndbName=yourdbname\ndbUsername=yourusername\ndbPassword=yourpassword\ndbHost=yourhost\ndbPort=yourport\n</pre>\n<h4 id=\"Config file with a specific alias\">Config file with a specific alias</h4>\n<pre>\n[myoracle]\ndbapiModuleName=oracledb\ndbName=yourdbname\ndbUsername=yourusername\ndbPassword=yourpassword\ndbHost=yourhost\ndbPort=yourport\n</pre>\n<h4 id=\"Config file with some params only\">Config file with some params only</h4>\n<pre>\n[default]\ndbPassword=mysecret\n</pre>\n<h4 id=\"Config file with some custom DB module specific params\">Config file with some custom DB module specific params</h4>\n<pre>\n[default]\nmy_custom_param=value\n</pre>\n<h2 id=\"Inline assertions\">Inline assertions</h2>\n<p>Keywords, that accept arguments <code>assertion_operator</code> &lt;<a href=\"#type-AssertionOperator\" class=\"name\">AssertionOperator</a>&gt; and <code>expected_value</code>, perform a check according to the specified condition - using the <a href=\"https://github.com/MarketSquare/AssertionEngine\">Assertion Engine</a>.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person</td>\n<td><b>==</b></td>\n<td>2</td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n</tr>\n</table>\n<h2 id=\"Retry mechanism\">Retry mechanism</h2>\n<p>Assertion keywords, that accept arguments <code>retry_timeout</code> and <code>retry_pause</code>, support waiting for assertion to pass.</p>\n<p>Setting the <code>retry_timeout</code> argument enables the mechanism - in this case the SQL request and the assertion are executed in a loop, until the assertion is passed or the <code>retry_timeout</code> is reached. The pause between the loop iterations is set using the <code>retry_pause</code> argument.</p>\n<p>The argument values are set in <a href=\"http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#time-format\">Robot Framework time format</a> - e.g. <code>5 seconds</code>.</p>\n<p>The retry mechanism is disabled by default - the <code>retry_timeout</code> is set to <code>0</code>.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person</td>\n<td><b>==</b></td>\n<td>2</td>\n<td>retry_timeout=10 seconds</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n<td>retry_timeout=5s</td>\n<td>retry_timeout=1s</td>\n</tr>\n</table>\n<h2 id=\"Logging query results\">Logging query results</h2>\n<p>Keywords, that fetch results of a SQL query, print the result rows as a table in RF log.</p>\n<ul>\n<li>A log head limit of <b>50 rows</b> is applied, other table rows are truncated in the log message.</li>\n<li>The limit and the logging in general can be adjusted any time in your tests using the Keyword <a href=\"#Set%20Logging%20Query%20Results\" class=\"name\">Set Logging Query Results</a>.</li>\n</ul>\n<p>You can also setup the limit or disable the logging during the library import. Examples:</p>\n<pre>\n# Default behavior - logging of query results is enabled, log head is 50 rows.\n<b>*</b> Settings <b>*</b>\nLibrary    DatabaseLibrary\n\n# Logging of query results is disabled, log head is 50 rows (default).\nLibrary    DatabaseLibrary    log_query_results=False\n\n# Logging of query results is enabled (default), log head is 10 rows.\nLibrary    DatabaseLibrary    log_query_results_head=10\n\n# Logging of query results is enabled (default), log head limit is disabled (log all rows).\nLibrary    DatabaseLibrary    log_query_results_head=0\n</pre>\n<h2 id=\"Database modules compatibility\">Database modules compatibility</h2>\n<p>The library is basically compatible with any <a href=\"https://peps.python.org/pep-0249\">Python Database API Specification 2.0</a> module.</p>\n<p>However, the actual implementation in existing Python modules is sometimes quite different, which requires custom handling in the library. Therefore, there are some modules, which are \"natively\" supported in the library - and others, which may work and may not.</p>\n<p>See more on the <a href=\"https://github.com/MarketSquare/Robotframework-Database-Library\">project page on GitHub</a>.</p>", "version": "", "generated": "2024-09-25T10:59:34+00:00", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/__init__.py", "lineno": 25, "tags": [], "inits": [{"name": "__init__", "args": [{"name": "log_query_results", "type": null, "defaultValue": "True", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "log_query_results=True"}, {"name": "log_query_results_head", "type": null, "defaultValue": "50", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "log_query_results_head=50"}], "returnType": null, "doc": "<p>The library can be imported without any arguments:</p>\n<pre>\n<b>*</b> Settings <b>*</b>\nLibrary    DatabaseLibrary\n</pre>\n<p>Use optional library import parameters to disable <a href=\"#Logging%20query%20results\" class=\"name\">Logging query results</a> or setup the log head.</p>", "shortdoc": "The library can be imported without any arguments: | *** Settings *** | Library    DatabaseLibrary Use optional library import parameters to disable `Logging query results` or setup the log head.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/__init__.py", "lineno": 202}], "keywords": [{"name": "Call Stored Procedure", "args": [{"name": "spName", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "spName: str"}, {"name": "spParams", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "spParams: List | None = None"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "additional_output_params", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "additional_output_params: List | None = None"}], "returnType": null, "doc": "<p>Calls a stored procedure <span class=\"name\">spName</span> with the <span class=\"name\">spParams</span> - a <b>list</b> of parameters the procedure requires. <b>Returns two lists</b> - the <i>parameter values</i> and the <i>result sets</i>.</p>\n<p>Use the special <b>CURSOR</b> value for OUT params, which should receive result sets - relevant only for some databases (e.g. Oracle or PostgreSQL).</p>\n<p>Use the <span class=\"name\">additional_output_params</span> list for OUT params of a procedure in MSSQL.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <span class=\"name\">sansTran</span> to run command without an explicit transaction commit or rollback.</p>\n<h2>Handling parameters and result sets</h2>\n<p>Handling the input and output parameters and the result sets is very different depending on the database itself and on the Python database driver - i.e. how it implements the <span class=\"name\">cursor.callproc()</span> function.</p>\n<h3>Common case (e.g. MySQL)</h3>\n<p>Generally a procedure call requires all parameter values (IN and OUT) put together in a list - <span class=\"name\">spParams</span>.</p>\n<p>Calling the procedure returns <b>two lists</b>:</p>\n<ul>\n<li><b>Param values</b> - the copy of procedure parameters (modified, if the procedure changes the OUT params). The list is empty, if procedures receives no params.</li>\n<li><b>Result sets</b> - the list of lists, each of them containing results of some query, if the procedure returns them.</li>\n</ul>\n<h3>Oracle (oracledb, cx_Oracle)</h3>\n<p>Oracle procedures work fine with simple IN and OUT params, but require some special handling of result sets.</p>\n<h4>Simple case with IN and OUT params (no result sets)</h4>\n<p>Consider the following procedure:</p>\n<pre>\nCREATE OR REPLACE PROCEDURE\nget_second_name (person_first_name IN VARCHAR, person_second_name OUT VARCHAR) AS\nBEGIN\n  SELECT last_name\n  INTO person_second_name\n  FROM person\n  WHERE first_name = person_first_name;\nEND;\n</pre>\n<p>Calling the procedure in Robot Framework:</p>\n<pre>\n@{params}=         Create List    Jerry    OUTPUT\n# Second parameter value can be anything, it will be replaced anyway\n\n${param values}    ${result sets}=    Call Stored Procedure    get_second_name    ${params}\n# ${param values} = ['Jerry', 'Schneider']\n# ${result sets} = []\n</pre>\n<h4>Oracle procedure returning a result set</h4>\n<p>If a procedure in Oracle should return a result set, it must take OUT parameters of a special type - <i>SYS_REFCURSOR</i>.</p>\n<p>Consider the following procedure:</p>\n<pre>\nget_all_second_names (second_names_cursor OUT SYS_REFCURSOR) AS\nBEGIN\n  OPEN second_names_cursor for\n  SELECT LAST_NAME FROM person;\nEND;\n</pre>\n<p>Calling the procedure in Robot Framework requires the special value <b>CURSOR</b> for the OUT parameters, they will be converted to appropriate DB variables before calling the procedure.</p>\n<pre>\n@{params}=    Create List    CURSOR\n# The parameter must have this special value CURSOR\n\n${param values}    ${result sets}=    Call Stored Procedure    get_all_second_names    ${params}\n# ${param values} = [&lt;oracledb.Cursor on &lt;oracledb.Connection ...&gt;&gt;]\n# ${result sets} = [[('Franz Allan',), ('Jerry',)], [('See',), ('Schneider',)]]\n</pre>\n<h4>Oracle procedure returning multiple result sets</h4>\n<p>If a procedure takes multiple OUT parameters of the <i>SYS_REFCURSOR</i> type, they all must have the special <b>CURSOR</b> value when calling the procedure:</p>\n<pre>\n@{params} =        Create List         CURSOR    CURSOR\n${param values}    ${result sets} =    Call Stored Procedure    Get_all_first_and_second_names    ${params}\n# ${param values} = [&lt;oracledb.Cursor on &lt;oracledb.Connection ...&gt;&gt;, &lt;oracledb.Cursor on &lt;oracledb.Connection ...&gt;&gt;]\n# ${result sets}  = [[('Franz Allan',), ('Jerry',)], [('See',), ('Schneider',)]]\n</pre>\n<h3>PostgreSQL (psycopg2, psycopg3)</h3>\n<p>PostgreSQL doesn't return single values as params, only as result sets. It also supports special handling of result sets over OUT params of a special type (like Oracle).</p>\n<h4>Simple case with IN and OUT params (no CURSOR parameters)</h4>\n<p>Consider the following procedure:</p>\n<pre>\nCREATE FUNCTION\nget_second_name (IN person_first_name VARCHAR(20),\nOUT person_second_name VARCHAR(20))\nLANGUAGE plpgsql\nAS\n'\nBEGIN\n  SELECT LAST_NAME INTO person_second_name\n  FROM person\n  WHERE FIRST_NAME = person_first_name;\nEND\n';\n</pre>\n<p>Calling the procedure in Robot Framework:</p>\n<pre>\n@{params}=    Create List    Jerry\n${param values}    ${result sets}=    Call Stored Procedure    get_second_name    ${params}\n# ${param values} = ['Jerry']\n# ${result sets} = [[('Schneider',)]]\n</pre>\n<h4>PostgreSQL procedure with CURSOR parameters</h4>\n<p>If a procedure in PostgreSQL should return a proper result set, it must take OUT parameters of a special type - <i>refcursor</i>.</p>\n<p>Consider the following procedure:</p>\n<pre>\nCREATE FUNCTION\nget_all_first_and_second_names(result1 refcursor, result2 refcursor)\nRETURNS SETOF refcursor\nLANGUAGE plpgsql\nAS\n'\nBEGIN\n  OPEN result1 FOR SELECT FIRST_NAME FROM person;\n  RETURN NEXT result1;\n  OPEN result2 FOR SELECT LAST_NAME FROM person;\n  RETURN NEXT result2;\nEND\n';\n</pre>\n<p>Calling the procedure in Robot Framework requires the special value <b>CURSOR</b> for the OUT parameters, they will be converted to appropriate DB variables before calling the procedure.</p>\n<pre>\n@{params}=    Create List    CURSOR    CURSOR\n# The parameters must have this special value CURSOR\n\n${param values}    ${result sets}=    Call Stored Procedure    get_all_first_and_second_names    ${params}\n# ${param values} = ['CURSOR_0', 'CURSOR_1']\n# ${result sets} = [[('Franz Allan',), ('Jerry',)], [('See',), ('Schneider',)]\n</pre>\n<h3>MS SQL Server (pymssql)</h3>\n<p>The <i>pymssql</i> driver doesn't natively support getting the OUT parameter values after calling a procedure.</p>\n<ul>\n<li>This requires special handling of OUT parameters using the <span class=\"name\">additional_output_params</span> argument.</li>\n<li>Furthermore, it's not possible to fetch the OUT parameter values for a procedure, which returns a result set AND has OUT parameters.</li>\n</ul>\n<h4>Simple case with IN and OUT params (no result sets)</h4>\n<p>Consider the following procedure:</p>\n<pre>\nCREATE PROCEDURE\nreturn_out_param_without_result_sets\n@my_input VARCHAR(20),\n@my_output INT OUTPUT\nAS\nBEGIN\n IF @my_input = 'give me 1'\n    BEGIN\n        SELECT @my_output = 1;\n    END\n    ELSE\n    BEGIN\n        SELECT @my_output = 0;\n    END\nEND;\n</pre>\n<p>Calling the procedure in Robot Framework requires putting the IN parameters as usual in the <span class=\"name\">spParams</span> argument, but the sample values of OUT parameters must be put in the argument <span class=\"name\">additional_output_params</span>.</p>\n<pre>\n@{params}=    Create List    give me 1\n@{out_params}=    Create List    ${9}\n${param values}    ${result sets}=    Call Stored Procedure    return_out_param_without_result_sets\n...    ${params}    additional_output_params=${out_params}\n# ${result sets} = []\n# ${param values} = ('give me 1', 1)\n</pre>\n<p>The library uses the sample values in the <span class=\"name\">additional_output_params</span> list to determine the number and the type of OUT parameters - so they are type-sensitive, the type must be the same as in the procedure itself.</p>\n<h4>MS SQL procedure returning a result set (no OUT params)</h4>\n<p>If a procedure doesn't have any OUT params and returns only result sets, they are handled in a normal way. Consider the following procedure:</p>\n<pre>\nCREATE PROCEDURE get_all_first_and_second_names\nAS\nBEGIN\n  SELECT FIRST_NAME FROM person;\n  SELECT LAST_NAME FROM person;\n  RETURN;\nEND;\n</pre>\n<p>Calling the procedure in Robot Framework:</p>\n<pre>\n${param values}    ${result sets}=    Call Stored Procedure    get_all_first_and_second_names\n${param values} = ()\n${result sets} = [[('Franz Allan',), ('Jerry',)], [('See',), ('Schneider',)]]\n</pre>\n<h4>MS SQL procedure returning result sets AND OUT params</h4>\n<p>This case is <b>not fully supported</b> by the library - the OUT params won't be fetched.</p>", "shortdoc": "Calls a stored procedure `spName` with the `spParams` - a *list* of parameters the procedure requires. *Returns two lists* - the _parameter values_ and the _result sets_.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 411}, {"name": "Check If Exists In Database", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if any row would be returned by given the input <code>selectStatement</code>. If there are no results, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td></td>\n</tr>\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n</tr>\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 27, "deprecated": true}, {"name": "Check If Not Exists In Database", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>This is the negation of <span class=\"name\">check_if_exists_in_database</span>.</p>\n<p>Check if no rows would be returned by given the input <code>selectStatement</code>. If there are any results, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td></td>\n</tr>\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n</tr>\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 66, "deprecated": true}, {"name": "Check Query Result", "args": [{"name": "selectStatement", "type": null, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement"}, {"name": "assertion_operator", "type": {"name": "AssertionOperator", "typedoc": "AssertionOperator", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "assertion_operator: AssertionOperator"}, {"name": "expected_value", "type": {"name": "Any", "typedoc": "Any", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "expected_value: Any"}, {"name": "row", "type": null, "defaultValue": "0", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "row=0"}, {"name": "col", "type": null, "defaultValue": "0", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "col=0"}, {"name": "assertion_message", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "assertion_message: str | None = None"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "retry_timeout", "type": null, "defaultValue": "0 seconds", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "retry_timeout=0 seconds"}, {"name": "retry_pause", "type": null, "defaultValue": "0.5 seconds", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "retry_pause=0.5 seconds"}], "returnType": null, "doc": "<p>Check value in query result returned from <code>selectStatement</code> using <code>assertion_operator</code> and <code>expected_value</code>. The value position in results can be adjusted using <code>row</code> and <code>col</code> parameters (0-based). See <a href=\"#Inline%20assertions\" class=\"name\">Inline assertions</a> for more details.</p>\n<p><b>The assertion in this keyword is type sensitive!</b> The <code>expected_value</code> is taken as a string, no argument conversion is performed. Use RF syntax like <code>${1}</code> for numeric values.</p>\n<p>Use optional <code>assertion_message</code> to override the default error message.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Use <code>retry_timeout</code> and <code>retry_pause</code> parameters to enable waiting for assertion to pass. See <a href=\"#Retry%20mechanism\" class=\"name\">Retry mechanism</a> for more details.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name, last_name FROM person</td>\n<td><b>==</b></td>\n<td>Schneider</td>\n<td>row=1</td>\n<td>col=1</td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>==</b></td>\n<td>2</td>\n<td># Fails, if query returns an integer value</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>==</b></td>\n<td>${2}</td>\n<td># Works, if query returns an integer value</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>equal</b></td>\n<td>Franz Allan</td>\n<td>assertion_message=my error message</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>inequal</b></td>\n<td>John</td>\n<td>alias=my_alias</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n<td>sansTran=True</td>\n<td></td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n<td>parameters=${parameters}</td>\n<td></td>\n</tr>\n</table>", "shortdoc": "Check value in query result returned from ``selectStatement`` using ``assertion_operator`` and ``expected_value``. The value position in results can be adjusted using ``row`` and ``col`` parameters (0-based). See `Inline assertions` for more details.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 316}, {"name": "Check Row Count", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "assertion_operator", "type": {"name": "AssertionOperator", "typedoc": "AssertionOperator", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "assertion_operator: AssertionOperator"}, {"name": "expected_value", "type": {"name": "int", "typedoc": "integer", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "expected_value: int"}, {"name": "assertion_message", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "assertion_message: str | None = None"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "retry_timeout", "type": null, "defaultValue": "0 seconds", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "retry_timeout=0 seconds"}, {"name": "retry_pause", "type": null, "defaultValue": "0.5 seconds", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "retry_pause=0.5 seconds"}], "returnType": null, "doc": "<p>Check the number of rows returned from <code>selectStatement</code> using <code>assertion_operator</code> and <code>expected_value</code>. See <a href=\"#Inline%20assertions\" class=\"name\">Inline assertions</a> for more details.</p>\n<p>Use optional <code>assertion_message</code> to override the default error message.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Use <code>retry_timeout</code> and <code>retry_pause</code> parameters to enable waiting for assertion to pass. See <a href=\"#Retry%20mechanism\" class=\"name\">Retry mechanism</a> for more details.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>==</b></td>\n<td>1</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>&gt;=</b></td>\n<td>2</td>\n<td>assertion_message=my error message</td>\n</tr>\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>inequal</b></td>\n<td>3</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>less than</b></td>\n<td>4</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td><b>equals</b></td>\n<td>5</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "Check the number of rows returned from ``selectStatement`` using ``assertion_operator`` and ``expected_value``. See `Inline assertions` for more details.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 265}, {"name": "Connect To Database", "args": [{"name": "dbapiModuleName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbapiModuleName: str | None = None"}, {"name": "dbName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbName: str | None = None"}, {"name": "dbUsername", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbUsername: str | None = None"}, {"name": "dbPassword", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbPassword: str | None = None"}, {"name": "dbHost", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbHost: str | None = None"}, {"name": "dbPort", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "int", "typedoc": "integer", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbPort: int | None = None"}, {"name": "dbCharset", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbCharset: str | None = None"}, {"name": "dbDriver", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbDriver: str | None = None"}, {"name": "dbConfigFile", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbConfigFile: str | None = None"}, {"name": "driverMode", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "driverMode: str | None = None"}, {"name": "alias", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "default", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str = default"}, {"name": "custom_connection_params", "type": null, "defaultValue": null, "kind": "VAR_NAMED", "required": false, "repr": "**custom_connection_params"}], "returnType": null, "doc": "<p>Creates a database connection using the DB API 2.0 module <code>dbapiModuleName</code> and the parameters provided. Along with listed commonly used arguments (<span class=\"name\">dbName</span>, <span class=\"name\">dbHost</span> etc.) you can set any other DB module specific parameters as key/value pairs.</p>\n<p>Use <code>dbConfigFile</code> to provide a path to configuration file with connection parameters to be used along with / instead of keyword arguments. If no specified, it defaults to <span class=\"name\">./resources/db.cfg</span>. See <a href=\"#Using%20configuration%20file\" class=\"name\">Using configuration file</a> for more details.</p>\n<p>All params are optional, although <code>dbapiModuleName</code> must be set - either as keyword argument or in config file. If some of the listed keyword arguments (<span class=\"name\">dbName</span>, <span class=\"name\">dbHost</span> etc.) are not provided (i.e. left on dafault value <a href=\"#type-None\" class=\"name\">None</a>), they are normally not passed to the Python DB module at all, except:</p>\n<ul>\n<li><i>dbPort</i> - commonly used port number for known databases is set as fallback</li>\n<li><i>dbCharset</i> - <i>UTF8</i> is used as fallback for <i>pymysql</i>, <i>pymssql</i> and <i>pyodbc</i></li>\n<li><i>driverMode</i> - <i>thin</i> is used as fallback for <i>oracledb</i></li>\n</ul>\n<p>Other custom params from keyword arguments and config file are passed to the Python DB module as provided - normally as arguments for the <i>connect()</i> function. However, when using <b>pyodbc</b>, the connection is established using a connection string - so all the custom params are added into it instead of function arguments.</p>\n<p>Optional <code>alias</code> parameter can be used for creating multiple open connections, even for different databases. If the same alias is given twice then previous connection will be overridden.</p>\n<p>The <code>driverMode</code> is used to select the <b>oracledb</b> client mode. Allowed values are:</p>\n<ul>\n<li><i>thin</i> (default if omitted)</li>\n<li><i>thick</i></li>\n<li><i>thick,lib_dir=&lt;PATH_TO_ORACLE_CLIENT&gt;</i></li>\n</ul>\n<p>Examples</p>\n<table border=\"1\">\n<tr>\n<td>Connect To Database</td>\n<td>psycopg2</td>\n<td>my_db</td>\n<td>user</td>\n<td>pass</td>\n<td>tiger.foobar.com</td>\n<td>5432</td>\n<td></td>\n</tr>\n<tr>\n<td>Connect To Database</td>\n<td>psycopg2</td>\n<td>my_db</td>\n<td>user</td>\n<td>pass</td>\n<td>tiger.foobar.com</td>\n<td>5432</td>\n<td>my_custom_param=value</td>\n</tr>\n<tr>\n<td>Connect To Database</td>\n<td>psycopg2</td>\n<td>my_db</td>\n<td>user</td>\n<td>pass</td>\n<td>tiger.foobar.com</td>\n<td>5432</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Connect To Database</td>\n<td>dbConfigFile=my_db_params.cfg</td>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n</table>", "shortdoc": "Creates a database connection using the DB API 2.0 module ``dbapiModuleName`` and the parameters provided. Along with listed commonly used arguments (`dbName`, `dbHost` etc.) you can set any other DB module specific parameters as key/value pairs.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 159}, {"name": "Connect To Database Using Custom Connection String", "args": [{"name": "dbapiModuleName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbapiModuleName: str | None = None"}, {"name": "db_connect_string", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_connect_string: str = "}, {"name": "alias", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "default", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str = default"}], "returnType": null, "doc": "<p>Loads the DB API 2.0 module given <span class=\"name\">dbapiModuleName</span> then uses it to connect to the database using the <span class=\"name\">db_connect_string</span> (parsed as single connection string or URI).</p>\n<p>Use <span class=\"name\">connect_to_database_using_custom_params</span> for passing connection params as named arguments.</p>\n<p>Example usage:</p>\n<table border=\"1\">\n<tr>\n<td>Connect To Database Using Custom Connection String</td>\n<td>psycopg2</td>\n<td><a href=\"postgresql://postgres:s3cr3t@tiger.foobar.com:5432/my_db_test\">postgresql://postgres:s3cr3t@tiger.foobar.com:5432/my_db_test</a></td>\n</tr>\n<tr>\n<td>Connect To Database Using Custom Connection String</td>\n<td>oracledb</td>\n<td>username/pass@localhost:1521/orclpdb</td>\n</tr>\n</table>", "shortdoc": "Loads the DB API 2.0 module given `dbapiModuleName` then uses it to connect to the database using the `db_connect_string` (parsed as single connection string or URI).", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 466}, {"name": "Connect To Database Using Custom Params", "args": [{"name": "dbapiModuleName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "dbapiModuleName: str | None = None"}, {"name": "db_connect_string", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_connect_string: str = "}, {"name": "alias", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "default", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str = default"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Connect%20To%20Database\" class=\"name\">Connect To Database</a> keyword with custom parameters instead. The deprecated keyword will be removed in future versions.</p>\n<p>Loads the DB API 2.0 module given <span class=\"name\">dbapiModuleName</span> then uses it to connect to the database using the map string <span class=\"name\">db_connect_string</span> (parsed as a list of named arguments).</p>\n<p>Use <span class=\"name\">connect_to_database_using_custom_connection_string</span> for passing all params in a single connection string or URI.</p>\n<p>Example usage:</p>\n<table border=\"1\">\n<tr>\n<td>Connect To Database Using Custom Params</td>\n<td>psycopg2</td>\n<td>database='my_db_test', user='postgres', password='s3cr3t', host='tiger.foobar.com', port=5432</td>\n</tr>\n<tr>\n<td>Connect To Database Using Custom Params</td>\n<td>jaydebeapi</td>\n<td>'oracle.jdbc.driver.OracleDriver', 'my_db_test', 'system', 's3cr3t'</td>\n</tr>\n<tr>\n<td>Connect To Database Using Custom Params</td>\n<td>oracledb</td>\n<td>user=\"username\", password=\"pass\", dsn=\"localhost/orclpdb\"</td>\n</tr>\n<tr>\n<td>Connect To Database Using Custom Params</td>\n<td>sqlite3</td>\n<td>database=\"./my_database.db\", isolation_level=None</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Connect To Database` keyword with custom parameters instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 435, "deprecated": true}, {"name": "Delete All Rows From Table", "args": [{"name": "tableName", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "tableName: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}], "returnType": null, "doc": "<p>Delete all the rows within a given table.</p>\n<p>Use optional <span class=\"name\">sansTran</span> to run command without an explicit transaction commit or rollback.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Delete All Rows From Table</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>Delete All Rows From Table</td>\n<td>person</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Delete All Rows From Table</td>\n<td>person</td>\n<td>sansTran=True</td>\n</tr>\n</table>", "shortdoc": "Delete all the rows within a given table.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 193}, {"name": "Description", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p>Uses the input <code>selectStatement</code> to query a table in the db which will be used to determine the description.</p>\n<p>For example, given we have a table <span class=\"name\">person</span> with the following data:</p>\n<table border=\"1\">\n<tr>\n<td>id</td>\n<td>first_name</td>\n<td>last_name</td>\n</tr>\n<tr>\n<td>1</td>\n<td>Franz Allan</td>\n<td>See</td>\n</tr>\n</table>\n<p>When you do the following:</p>\n<table border=\"1\">\n<tr>\n<td>@{queryResults}</td>\n<td>Description</td>\n<td>SELECT * FROM person</td>\n<td></td>\n</tr>\n<tr>\n<td>@{queryResults}</td>\n<td>Description</td>\n<td>SELECT * FROM person</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Log Many</td>\n<td>@{queryResults}</td>\n<td></td>\n<td></td>\n</tr>\n</table>\n<p>You will get the following: [Column(name='id', type_code=1043, display_size=None, internal_size=255, precision=None, scale=None, null_ok=None)] [Column(name='first_name', type_code=1043, display_size=None, internal_size=255, precision=None, scale=None, null_ok=None)] [Column(name='last_name', type_code=1043, display_size=None, internal_size=255, precision=None, scale=None, null_ok=None)]</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client):</p>\n<table border=\"1\">\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>${desc}</td>\n<td>Description</td>\n<td>SELECT * FROM %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>\n<p>Using optional <span class=\"name\">sansTran</span> to run command without an explicit transaction commit or rollback:</p>\n<table border=\"1\">\n<tr>\n<td>@{queryResults}</td>\n<td>Description</td>\n<td>SELECT * FROM person</td>\n<td>True</td>\n</tr>\n</table>", "shortdoc": "Uses the input ``selectStatement`` to query a table in the db which will be used to determine the description.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 144}, {"name": "Disconnect From All Databases", "args": [], "returnType": null, "doc": "<p>Disconnects from all the databases - useful when testing with multiple database connections (aliases).</p>\n<p>For example:</p>\n<table border=\"1\">\n<tr>\n<td>Disconnect From All Databases</td>\n<td># Closes connections to all databases</td>\n</tr>\n</table>", "shortdoc": "Disconnects from all the databases - useful when testing with multiple database connections (aliases).", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 511}, {"name": "Disconnect From Database", "args": [{"name": "error_if_no_connection", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "error_if_no_connection: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}], "returnType": null, "doc": "<p>Disconnects from the database.</p>\n<p>By default, it's not an error if there was no open database connection - suitable for usage as a teardown. However, you can enforce it using the <span class=\"name\">error_if_no_connection</span> parameter.</p>\n<p>Example usage:</p>\n<table border=\"1\">\n<tr>\n<td>Disconnect From Database</td>\n<td># disconnects from current connection to the database</td>\n<td></td>\n</tr>\n<tr>\n<td>Disconnect From Database</td>\n<td>alias=my_alias</td>\n<td># disconnects from current connection to the database</td>\n</tr>\n</table>", "shortdoc": "Disconnects from the database.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 490}, {"name": "Execute Sql Script", "args": [{"name": "sqlScriptFileName", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "sqlScriptFileName: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "split", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "True", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "split: bool = True"}], "returnType": null, "doc": "<p>Executes the content of the <span class=\"name\">sqlScriptFileName</span> as SQL commands. Useful for setting the database to a known state before running your tests, or clearing out your test data after running each a test.</p>\n<p>SQL commands are expected to be delimited by a semicolon (';') - they will be split and executed separately. You can disable this behaviour setting the parameter <span class=\"name\">split</span> to <i>False</i> - in this case the entire script content will be passed to the database module for execution.</p>\n<p>Sample usage :</p>\n<table border=\"1\">\n<tr>\n<td>Execute Sql Script</td>\n<td>${EXECDIR}${/}resources${/}DDL-setup.sql</td>\n<td></td>\n</tr>\n<tr>\n<td>Execute Sql Script</td>\n<td>${EXECDIR}${/}resources${/}DML-setup.sql</td>\n<td></td>\n</tr>\n<tr>\n<td>Execute Sql Script</td>\n<td>${EXECDIR}${/}resources${/}DDL-setup.sql</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>#interesting stuff here</td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>Execute Sql Script</td>\n<td>${EXECDIR}${/}resources${/}DML-teardown.sql</td>\n<td></td>\n</tr>\n<tr>\n<td>Execute Sql Script</td>\n<td>${EXECDIR}${/}resources${/}DDL-teardown.sql</td>\n<td></td>\n</tr>\n</table>\n<p>For example: DELETE FROM person_employee_table; DELETE FROM person_table; DELETE FROM employee_table;</p>\n<p>Also, the last SQL command can optionally omit its trailing semi-colon.</p>\n<p>For example: DELETE FROM person_employee_table; DELETE FROM person_table; DELETE FROM employee_table</p>\n<p>Given this, that means you can create spread your SQL commands in several lines.</p>\n<p>For example: DELETE FROM person_employee_table; DELETE FROM person_table; DELETE FROM employee_table</p>\n<p>However, lines that starts with a number sign (<span class=\"name\">#</span>) or a double dash (\"--\") are treated as a commented line. Thus, none of the contents of that line will be executed.</p>\n<p>For example: # Delete the bridging table first... DELETE FROM person_employee_table; # ...and then the bridged tables. DELETE FROM person_table; DELETE FROM employee_table</p>\n<p>The slash signs (\"/\") are always ignored and have no impact on execution order.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <span class=\"name\">sansTran</span> to run command without an explicit transaction commit or rollback:</p>\n<table border=\"1\">\n<tr>\n<td>Execute Sql Script</td>\n<td>${EXECDIR}${/}resources${/}DDL-setup.sql</td>\n<td>True</td>\n</tr>\n</table>", "shortdoc": "Executes the content of the `sqlScriptFileName` as SQL commands. Useful for setting the database to a known state before running your tests, or clearing out your test data after running each a test.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 223}, {"name": "Execute Sql String", "args": [{"name": "sqlString", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "sqlString: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "omitTrailingSemicolon", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "omitTrailingSemicolon: bool | None = None"}], "returnType": null, "doc": "<p>Executes the <code>sqlString</code> as a single SQL command.</p>\n<p>Use optional <code>sansTran</code> to run command without an explicit transaction commit or rollback.</p>\n<p>Use optional <code>omitTrailingSemicolon</code> parameter for explicit instruction, if the trailing semicolon (;) at the SQL string end should be removed or not:</p>\n<ul>\n<li>Some database modules (e.g. Oracle) throw an exception, if you leave a semicolon at the string end</li>\n<li>However, there are exceptional cases, when you need it even for Oracle - e.g. at the end of a PL/SQL block.</li>\n<li>If not specified, it's decided based on the current database module in use. For Oracle, the semicolon is removed by default.</li>\n</ul>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>For example:</p>\n<table border=\"1\">\n<tr>\n<td>Execute Sql String</td>\n<td>DELETE FROM person_employee_table; DELETE FROM person_table</td>\n<td></td>\n</tr>\n<tr>\n<td>Execute Sql String</td>\n<td>DELETE FROM person_employee_table; DELETE FROM person_table</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Execute Sql String</td>\n<td>DELETE FROM person_employee_table; DELETE FROM person_table</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>Execute Sql String</td>\n<td>CREATE PROCEDURE proc AS BEGIN DBMS_OUTPUT.PUT_LINE('Hello!'); END;</td>\n<td>omitTrailingSemicolon=False</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>person_employee_table</td>\n</tr>\n<tr>\n<td>Execute Sql String</td>\n<td>SELECT * FROM %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "Executes the ``sqlString`` as a single SQL command.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 367}, {"name": "Query", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "returnAsDict", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "returnAsDict: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p>Runs a query with the <code>selectStatement</code> and returns the result as a list of rows. The type of row values depends on the database module - usually they are tuples or tuple-like objects.</p>\n<p>Set optional input <code>returnAsDict</code> to <i>True</i> to explicitely convert the return values into a list of dictionaries.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client):</p>\n<table border=\"1\">\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>person</td>\n</tr>\n<tr>\n<td>Query</td>\n<td>SELECT * FROM %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>\n<p>Use optional <code>sansTran</code> to run command without an explicit transaction commit or rollback:</p>\n<table border=\"1\">\n<tr>\n<td>@{queryResults}</td>\n<td>Query</td>\n<td>SELECT * FROM person</td>\n<td>True</td>\n</tr>\n</table>\n<p>Tip: Unless you want to log all column values of the specified rows, try specifying the column names in your select statements as much as possible to prevent any unnecessary surprises with schema changes and to easily see what your [] indexing is trying to retrieve (i.e. instead of <span class=\"name\">\"select * from my_table\"</span>, try <span class=\"name\">\"select id, col_1, col_2 from my_table\"</span>).</p>\n<p>For example, given we have a table <span class=\"name\">person</span> with the following data:</p>\n<table border=\"1\">\n<tr>\n<td>id</td>\n<td>first_name</td>\n<td>last_name</td>\n</tr>\n<tr>\n<td>1</td>\n<td>Franz Allan</td>\n<td>See</td>\n</tr>\n</table>\n<p>When you do the following:</p>\n<table border=\"1\">\n<tr>\n<td>@{queryResults}</td>\n<td>Query</td>\n<td>SELECT * FROM person</td>\n<td></td>\n</tr>\n<tr>\n<td>@{queryResults}</td>\n<td>Query</td>\n<td>SELECT * FROM person</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Log Many</td>\n<td>@{queryResults}</td>\n<td></td>\n<td></td>\n</tr>\n</table>\n<p>You will get the following: [1, 'Franz Allan', 'See']</p>\n<p>Also, you can do something like this:</p>\n<table border=\"1\">\n<tr>\n<td>${queryResults}</td>\n<td>Query</td>\n<td>SELECT first_name, last_name FROM person</td>\n</tr>\n<tr>\n<td>Log</td>\n<td>${queryResults[0][1]}, ${queryResults[0][0]}</td>\n<td></td>\n</tr>\n</table>\n<p>And get the following See, Franz Allan</p>", "shortdoc": "Runs a query with the ``selectStatement`` and returns the result as a list of rows. The type of row values depends on the database module - usually they are tuples or tuple-like objects.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 33}, {"name": "Row Count", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p>Uses the input <code>selectStatement</code> to query the database and returns the number of rows from the query.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>sansTran</code> to run command without an explicit transaction commit or rollback:</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client):</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>${rowCount}</td>\n<td>Row Count</td>\n<td>SELECT * FROM person</td>\n<td></td>\n</tr>\n<tr>\n<td>${rowCount}</td>\n<td>Row Count</td>\n<td>SELECT * FROM person</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>${rowCount}</td>\n<td>Row Count</td>\n<td>SELECT * FROM person</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>${rowCount}</td>\n<td>Row Count</td>\n<td>SELECT * FROM %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "Uses the input ``selectStatement`` to query the database and returns the number of rows from the query.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 101}, {"name": "Row Count Is 0", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if any rows are returned from the submitted <code>selectStatement</code>. If there are, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n</tr>\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 107, "deprecated": true}, {"name": "Row Count Is Equal To X", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "numRows", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "numRows: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if the number of rows returned from <code>selectStatement</code> is equal to the value submitted. If not, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person</td>\n<td>1</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person</td>\n<td>3</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>0</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 145, "deprecated": true}, {"name": "Row Count Is Greater Than X", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "numRows", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "numRows: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if the number of rows returned from <code>selectStatement</code> is greater than the value submitted. If not, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person</td>\n<td>1</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>0</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 185, "deprecated": true}, {"name": "Row Count Is Less Than X", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "numRows", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "numRows: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if the number of rows returned from <code>selectStatement</code> is less than the value submitted. If not, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>Using optional <code>msg</code> to override the default error message:</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use optional <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>1</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>2</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>3</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>4</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>5</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 225, "deprecated": true}, {"name": "Set Auto Commit", "args": [{"name": "autoCommit", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "True", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "autoCommit: bool = True"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}], "returnType": null, "doc": "<p>Turn the autocommit on the database connection ON or OFF.</p>\n<p>The default behaviour on a newly created database connection is to automatically start a transaction, which means that database actions that won't work if there is an active transaction will fail. Common examples of these actions are creating or deleting a database or database snapshot. By turning on auto commit on the database connection these actions can be performed.</p>\n<p>Example usage:</p>\n<pre>\n# Default behaviour, sets auto commit to true\nSet Auto Commit\nSet Auto Commit | alias=my_alias |\n# Explicitly set the desired state\nSet Auto Commit | False\n</pre>", "shortdoc": "Turn the autocommit on the database connection ON or OFF.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 523}, {"name": "Set Logging Query Results", "args": [{"name": "enabled", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "enabled: bool | None = None"}, {"name": "log_head", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "int", "typedoc": "integer", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "log_head: int | None = None"}], "returnType": null, "doc": "<p>Allows to enable/disable logging of query results and to adjust the log head value.</p>\n<ul>\n<li>Overrides the values, which were set during the library import.</li>\n<li>See <a href=\"#Logging%20query%20results\" class=\"name\">Logging query results</a> for details.</li>\n</ul>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Set Logging Query Results</td>\n<td>enabled=False</td>\n<td></td>\n</tr>\n<tr>\n<td>Set Logging Query Results</td>\n<td>enabled=True</td>\n<td>log_head=0</td>\n</tr>\n<tr>\n<td>Set Logging Query Results</td>\n<td>log_head=10</td>\n<td></td>\n</tr>\n</table>", "shortdoc": "Allows to enable/disable logging of query results and to adjust the log head value. - Overrides the values, which were set during the library import. - See `Logging query results` for details.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 708}, {"name": "Switch Database", "args": [{"name": "alias", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "alias: str"}], "returnType": null, "doc": "<p>Switch the default database connection to <code>alias</code>.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Switch Database</td>\n<td>my_alias</td>\n</tr>\n<tr>\n<td>Switch Database</td>\n<td>alias=my_alias</td>\n</tr>\n</table>", "shortdoc": "Switch the default database connection to ``alias``.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 543}, {"name": "Table Must Exist", "args": [{"name": "tableName", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "tableName: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}], "returnType": null, "doc": "<p>Check if the given table exists in the database.</p>\n<p>Set optional input <code>sansTran</code> to True to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Table Must Exist</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>Table Must Exist</td>\n<td>person</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Table Must Exist</td>\n<td>person</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Table Must Exist</td>\n<td>person</td>\n<td>sansTran=True</td>\n</tr>\n</table>", "shortdoc": "Check if the given table exists in the database.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 388}], "typedocs": [{"type": "Standard", "name": "Any", "doc": "<p>Any value is accepted. No conversion is done.</p>", "usages": ["Check Query Result"], "accepts": ["Any"]}, {"type": "Enum", "name": "AssertionOperator", "doc": "<p>Currently supported assertion operators are:</p>\n<table border=\"1\">\n<tr>\n<th>Operator</th>\n<th>Alternative Operators</th>\n<th>Description</th>\n<th>Validate Equivalent</th>\n</tr>\n<tr>\n<td><code>==</code></td>\n<td><code>equal</code>, <code>equals</code>, <code>should be</code></td>\n<td>Checks if returned value is equal to expected value.</td>\n<td><code>value == expected</code></td>\n</tr>\n<tr>\n<td><code>!=</code></td>\n<td><code>inequal</code>, <code>should not be</code></td>\n<td>Checks if returned value is not equal to expected value.</td>\n<td><code>value != expected</code></td>\n</tr>\n<tr>\n<td><code>&gt;</code></td>\n<td><code>greater than</code></td>\n<td>Checks if returned value is greater than expected value.</td>\n<td><code>value &gt; expected</code></td>\n</tr>\n<tr>\n<td><code>&gt;=</code></td>\n<td></td>\n<td>Checks if returned value is greater than or equal to expected value.</td>\n<td><code>value &gt;= expected</code></td>\n</tr>\n<tr>\n<td><code>&lt;</code></td>\n<td><code>less than</code></td>\n<td>Checks if returned value is less than expected value.</td>\n<td><code>value &lt; expected</code></td>\n</tr>\n<tr>\n<td><code>&lt;=</code></td>\n<td></td>\n<td>Checks if returned value is less than or equal to expected value.</td>\n<td><code>value &lt;= expected</code></td>\n</tr>\n<tr>\n<td><code>*=</code></td>\n<td><code>contains</code></td>\n<td>Checks if returned value contains expected value as substring.</td>\n<td><code>expected in value</code></td>\n</tr>\n<tr>\n<td></td>\n<td><code>not contains</code></td>\n<td>Checks if returned value does not contain expected value as substring.</td>\n<td><code>expected in value</code></td>\n</tr>\n<tr>\n<td><code>^=</code></td>\n<td><code>should start with</code>, <code>starts</code></td>\n<td>Checks if returned value starts with expected value.</td>\n<td><code>re.search(f\"^{expected}\", value)</code></td>\n</tr>\n<tr>\n<td><code>$=</code></td>\n<td><code>should end with</code>, <code>ends</code></td>\n<td>Checks if returned value ends with expected value.</td>\n<td><code>re.search(f\"{expected}$\", value)</code></td>\n</tr>\n<tr>\n<td><code>matches</code></td>\n<td></td>\n<td>Checks if given RegEx matches minimum once in returned value.</td>\n<td><code>re.search(expected, value)</code></td>\n</tr>\n<tr>\n<td><code>validate</code></td>\n<td></td>\n<td>Checks if given Python expression evaluates to <code>True</code>.</td>\n<td></td>\n</tr>\n<tr>\n<td><code>evaluate</code></td>\n<td><code>then</code></td>\n<td>When using this operator, the keyword does return the evaluated Python expression.</td>\n<td></td>\n</tr>\n</table>\n<p>Currently supported formatters for assertions are:</p>\n<table border=\"1\">\n<tr>\n<th>Formatter</th>\n<th>Description</th>\n</tr>\n<tr>\n<td><code>normalize spaces</code></td>\n<td>Substitutes multiple spaces to single space from the value</td>\n</tr>\n<tr>\n<td><code>strip</code></td>\n<td>Removes spaces from the beginning and end of the value</td>\n</tr>\n<tr>\n<td><code>case insensitive</code></td>\n<td>Converts value to lower case before comparing</td>\n</tr>\n<tr>\n<td><code>apply to expected</code></td>\n<td>Applies rules also for the expected value</td>\n</tr>\n</table>\n<p>Formatters are applied to the value before assertion is performed and keywords returns a value where rule is applied. Formatter is only applied to the value which keyword returns and not all rules are valid for all assertion operators. If <code>apply to expected</code> formatter is defined, then formatters are then formatter are also applied to expected value.</p>", "usages": ["Check Query Result", "Check Row Count"], "accepts": ["string"], "members": [{"name": "equal", "value": "=="}, {"name": "equals", "value": "=="}, {"name": "==", "value": "=="}, {"name": "should be", "value": "=="}, {"name": "inequal", "value": "!="}, {"name": "!=", "value": "!="}, {"name": "should not be", "value": "!="}, {"name": "less than", "value": "<"}, {"name": "<", "value": "<"}, {"name": "greater than", "value": ">"}, {"name": ">", "value": ">"}, {"name": "<=", "value": "<="}, {"name": ">=", "value": ">="}, {"name": "contains", "value": "*="}, {"name": "not contains", "value": "not contains"}, {"name": "*=", "value": "*="}, {"name": "starts", "value": "^="}, {"name": "^=", "value": "^="}, {"name": "should start with", "value": "^="}, {"name": "ends", "value": "$="}, {"name": "should end with", "value": "$="}, {"name": "$=", "value": "$="}, {"name": "matches", "value": "$"}, {"name": "validate", "value": "validate"}, {"name": "then", "value": "then"}, {"name": "evaluate", "value": "then"}]}, {"type": "Standard", "name": "boolean", "doc": "<p>Strings <code>TRUE</code>, <code>YES</code>, <code>ON</code> and <code>1</code> are converted to Boolean <code>True</code>, the empty string as well as strings <code>FALSE</code>, <code>NO</code>, <code>OFF</code> and <code>0</code> are converted to Boolean <code>False</code>, and the string <code>NONE</code> is converted to the Python <code>None</code> object. Other strings and other accepted values are passed as-is, allowing keywords to handle them specially if needed. All string comparisons are case-insensitive.</p>\n<p>Examples: <code>TRUE</code> (converted to <code>True</code>), <code>off</code> (converted to <code>False</code>), <code>example</code> (used as-is)</p>", "usages": ["Call Stored Procedure", "Check If Exists In Database", "Check If Not Exists In Database", "Check Query Result", "Check Row Count", "Delete All Rows From Table", "Description", "Disconnect From Database", "Execute Sql Script", "Execute Sql String", "Query", "Row Count", "Row Count Is 0", "Row Count Is Equal To X", "Row Count Is Greater Than X", "Row Count Is Less Than X", "Set Auto Commit", "Set Logging Query Results", "Table Must Exist"], "accepts": ["string", "integer", "float", "None"]}, {"type": "Standard", "name": "integer", "doc": "<p>Conversion is done using Python's <a href=\"https://docs.python.org/library/functions.html#int\">int</a> built-in function. Floating point numbers are accepted only if they can be represented as integers exactly. For example, <code>1.0</code> is accepted and <code>1.1</code> is not.</p>\n<p>Starting from RF 4.1, it is possible to use hexadecimal, octal and binary numbers by prefixing values with <code>0x</code>, <code>0o</code> and <code>0b</code>, respectively.</p>\n<p>Starting from RF 4.1, spaces and underscores can be used as visual separators for digit grouping purposes.</p>\n<p>Examples: <code>42</code>, <code>-1</code>, <code>0b1010</code>, <code>10 000 000</code>, <code>0xBAD_C0FFEE</code></p>", "usages": ["Check Row Count", "Connect To Database", "Set Logging Query Results"], "accepts": ["string", "float"]}, {"type": "Standard", "name": "list", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#list\">list</a> literals. They are converted to actual lists using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including lists and other containers.</p>\n<p>If the type has nested types like <code>list[int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>['one', 'two']</code>, <code>[('one', 1), ('two', 2)]</code></p>", "usages": ["Call Stored Procedure"], "accepts": ["string", "Sequence"]}, {"type": "Standard", "name": "None", "doc": "<p>String <code>NONE</code> (case-insensitive) is converted to Python <code>None</code> object. Other values cause an error.</p>", "usages": ["Call Stored Procedure", "Check If Exists In Database", "Check If Not Exists In Database", "Check Query Result", "Check Row Count", "Connect To Database", "Connect To Database Using Custom Connection String", "Connect To Database Using Custom Params", "Delete All Rows From Table", "Description", "Disconnect From Database", "Execute Sql Script", "Execute Sql String", "Query", "Row Count", "Row Count Is 0", "Row Count Is Equal To X", "Row Count Is Greater Than X", "Row Count Is Less Than X", "Set Auto Commit", "Set Logging Query Results", "Table Must Exist"], "accepts": ["string"]}, {"type": "Standard", "name": "string", "doc": "<p>All arguments are converted to Unicode strings.</p>", "usages": ["Call Stored Procedure", "Check If Exists In Database", "Check If Not Exists In Database", "Check Query Result", "Check Row Count", "Connect To Database", "Connect To Database Using Custom Connection String", "Connect To Database Using Custom Params", "Delete All Rows From Table", "Description", "Disconnect From Database", "Execute Sql Script", "Execute Sql String", "Query", "Row Count", "Row Count Is 0", "Row Count Is Equal To X", "Row Count Is Greater Than X", "Row Count Is Less Than X", "Set Auto Commit", "Switch Database", "Table Must Exist"], "accepts": ["Any"]}, {"type": "Standard", "name": "tuple", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#tuple\">tuple</a> literals. They are converted to actual tuples using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including tuples and other containers.</p>\n<p>If the type has nested types like <code>tuple[str, int, int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>('one', 'two')</code>, <code>(('one', 1), ('two', 2))</code></p>", "usages": ["Check If Exists In Database", "Check If Not Exists In Database", "Check Query Result", "Check Row Count", "Description", "Execute Sql String", "Query", "Row Count", "Row Count Is 0", "Row Count Is Equal To X", "Row Count Is Greater Than X", "Row Count Is Less Than X"], "accepts": ["string", "Sequence"]}]}
+libdoc = {"specversion": 3, "name": "DatabaseLibrary", "doc": "<p>The Database Library for <a href=\"https://robotframework.org\">Robot Framework</a> allows you to query a database and verify the results. It requires an appropriate <b>Python module to be installed separately</b> - depending on your database, like e.g. <span class=\"name\">oracledb</span> or <span class=\"name\">pymysql</span>.</p>\n<h3 id=\"Table of contents\">Table of contents</h3>\n<ul>\n<li><a href=\"#Requirements\" class=\"name\">Requirements</a></li>\n<li><a href=\"#Installation\" class=\"name\">Installation</a></li>\n<li><a href=\"#Basic%20usage%20examples\" class=\"name\">Basic usage examples</a></li>\n<li><a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a></li>\n<li><a href=\"#Using%20configuration%20file\" class=\"name\">Using configuration file</a></li>\n<li><a href=\"#Inline%20assertions\" class=\"name\">Inline assertions</a></li>\n<li><a href=\"#Retry%20mechanism\" class=\"name\">Retry mechanism</a></li>\n<li><a href=\"#Logging%20query%20results\" class=\"name\">Logging query results</a></li>\n<li><a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a></li>\n<li><a href=\"#Database%20modules%20compatibility\" class=\"name\">Database modules compatibility</a></li>\n<li><a href=\"#Importing\" class=\"name\">Importing</a></li>\n<li><a href=\"#Keywords\" class=\"name\">Keywords</a></li>\n</ul>\n<h2 id=\"Requirements\">Requirements</h2>\n<ul>\n<li>Python</li>\n<li>Robot Framework</li>\n<li>Python database module you're going to use - e.g. <span class=\"name\">oracledb</span></li>\n</ul>\n<h2 id=\"Installation\">Installation</h2>\n<pre>\npip install robotframework-databaselibrary\n</pre>\n<p>Don't forget to install the required Python database module!</p>\n<h2 id=\"Basic usage examples\">Basic usage examples</h2>\n<pre>\n<b>*</b> Settings <b>*</b>\nLibrary       DatabaseLibrary\nTest Setup    Connect To My Oracle DB\n\n<b>*</b> Keywords <b>*</b>\nConnect To My Oracle DB\n    Connect To Database\n    ...    oracledb\n    ...    db_name=db\n    ...    db_user=my_user\n    ...    db_password=my_pass\n    ...    db_host=127.0.0.1\n    ...    db_port=1521\n\n<b>*</b> Test Cases <b>*</b>\nGet All Names\n    ${Rows}=    Query    select FIRST_NAME, LAST_NAME from person\n    Should Be Equal    ${Rows}[0][0]    Franz Allan\n    Should Be Equal    ${Rows}[0][1]    See\n    Should Be Equal    ${Rows}[1][0]    Jerry\n    Should Be Equal    ${Rows}[1][1]    Schneider\n\nPerson Table Contains Expected Records\n    ${sql}=    Catenate    select LAST_NAME from person\n    Check Query Result    ${sql}    contains    See\n    Check Query Result    ${sql}    equals      Schneider    row=1\n\nWait Until Table Gets New Record\n    ${sql}=    Catenate    select LAST_NAME from person\n    Check Row Count    ${sql}    &gt;    2    retry_timeout=5s\n\nPerson Table Contains No Joe\n    ${sql}=    Catenate    SELECT id FROM person\n    ...                    WHERE FIRST_NAME= 'Joe'\n    Check Row Count    ${sql}   ==    0\n\n</pre>\n<h2 id=\"Handling multiple database connections\">Handling multiple database connections</h2>\n<p>The library can handle multiple connections to different databases using <b>aliases</b>. An alias is set while creating a connection and can be passed to library keywords in a corresponding argument.</p>\n<h3 id=\"Example\">Example</h3>\n<pre>\n<b>*</b> Settings <b>*</b>\nLibrary          DatabaseLibrary\nTest Setup       Connect To All Databases\nTest Teardown    Disconnect From All Databases\n\n<b>*</b> Keywords <b>*</b>\nConnect To All Databases\n    Connect To Database\n    ...    psycopg2\n    ...    db_name=db\n    ...    db_user=db_user\n    ...    db_password=pass\n    ...    db_host=127.0.0.1\n    ...    db_port=5432\n    ...    alias=postgres\n    Connect To Database\n    ...    pymysql\n    ...    db_name=db\n    ...    db_user=db_user\n    ...    db_password=pass\n    ...    db_host=127.0.0.1\n    ...    db_port=3306\n    ...    alias=mysql\n\n<b>*</b> Test Cases <b>*</b>\nUsing Aliases\n    ${names}=    Query    select LAST_NAME from person    alias=postgres\n    Execute Sql String    drop table XYZ                  alias=mysql\n\nSwitching Default Alias\n    Switch Database    postgres\n    ${names}=    Query    select LAST_NAME from person\n    Switch Database    mysql\n    Execute Sql String    drop table XYZ\n\n</pre>\n<h2 id=\"Using configuration file\">Using configuration file</h2>\n<p>The <a href=\"#Connect%20To%20Database\" class=\"name\">Connect To Database</a> keyword allows providing the connection parameters in two ways:</p>\n<ul>\n<li>As keyword arguments</li>\n<li>In a configuration file - a simple list of <i>key=value</i> pairs, set inside an <i>alias</i> section.</li>\n</ul>\n<p>You can use only one way or you can combine them:</p>\n<ul>\n<li>The keyword arguments are taken by default</li>\n<li>If no keyword argument is provided, a parameter value is searched in the config file</li>\n</ul>\n<p>Along with commonly used connection parameters, named exactly as keyword arguments, a config file can contain any other DB module specific parameters as key/value pairs. If same custom parameter is provided both as a keyword argument <b>and</b> in config file, the <b>keyword argument value takes precedence</b>.</p>\n<p>The path to the config file is set by default to <span class=\"name\">./resources/db.cfg</span>. You can change it using an according parameter in the <a href=\"#Connect%20To%20Database\" class=\"name\">Connect To Database</a> keyword.</p>\n<p>A config file <b>must</b> contain at least one section name - the connection alias, if used (see <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>), or <span class=\"name\">[default]</span> if no aliases are used.</p>\n<h3 id=\"Config file examples\">Config file examples</h3>\n<h4 id=\"Config file with default alias (equal to using no aliases at all)\">Config file with default alias (equal to using no aliases at all)</h4>\n<pre>\n[default]\ndb_module=psycopg2\ndb_name=yourdbname\ndb_user=yourusername\ndb_password=yourpassword\ndb_host=yourhost\ndb_port=yourport\n</pre>\n<h4 id=\"Config file with a specific alias\">Config file with a specific alias</h4>\n<pre>\n[myoracle]\ndb_module=oracledb\ndb_name=yourdbname\ndb_user=yourusername\ndb_password=yourpassword\ndb_host=yourhost\ndb_port=yourport\n</pre>\n<h4 id=\"Config file with some params only\">Config file with some params only</h4>\n<pre>\n[default]\ndb_password=mysecret\n</pre>\n<h4 id=\"Config file with some custom DB module specific params\">Config file with some custom DB module specific params</h4>\n<pre>\n[default]\nmy_custom_param=value\n</pre>\n<h2 id=\"Inline assertions\">Inline assertions</h2>\n<p>Keywords, that accept arguments <code>assertion_operator</code> &lt;<a href=\"#type-AssertionOperator\" class=\"name\">AssertionOperator</a>&gt; and <code>expected_value</code>, perform a check according to the specified condition - using the <a href=\"https://github.com/MarketSquare/AssertionEngine\">Assertion Engine</a>.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person</td>\n<td><b>==</b></td>\n<td>2</td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n</tr>\n</table>\n<h2 id=\"Retry mechanism\">Retry mechanism</h2>\n<p>Assertion keywords, that accept arguments <code>retry_timeout</code> and <code>retry_pause</code>, support waiting for assertion to pass.</p>\n<p>Setting the <code>retry_timeout</code> argument enables the mechanism - in this case the SQL request and the assertion are executed in a loop, until the assertion is passed or the <code>retry_timeout</code> is reached. The pause between the loop iterations is set using the <code>retry_pause</code> argument.</p>\n<p>The argument values are set in <a href=\"http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#time-format\">Robot Framework time format</a> - e.g. <code>5 seconds</code>.</p>\n<p>The retry mechanism is disabled by default - <code>retry_timeout</code> is set to <code>0</code>.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person</td>\n<td><b>==</b></td>\n<td>2</td>\n<td>retry_timeout=10 seconds</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n<td>retry_timeout=5s</td>\n<td>retry_pause=1s</td>\n</tr>\n</table>\n<h2 id=\"Logging query results\">Logging query results</h2>\n<p>Keywords, that fetch results of a SQL query, print the result rows as a table in RF log.</p>\n<ul>\n<li>A log head limit of <b>50 rows</b> is applied, other table rows are truncated in the log message.</li>\n<li>The limit and the logging in general can be adjusted any time in your tests using the Keyword <a href=\"#Set%20Logging%20Query%20Results\" class=\"name\">Set Logging Query Results</a>.</li>\n</ul>\n<p>You can also setup the limit or disable the logging during the library import. Examples:</p>\n<pre>\n<b>*</b> Settings <b>*</b>\n# Default behavior - logging of query results is enabled, log head is 50 rows.\nLibrary    DatabaseLibrary\n\n# Logging of query results is disabled, log head is 50 rows (default).\nLibrary    DatabaseLibrary    log_query_results=False\n\n# Logging of query results is enabled (default), log head is 10 rows.\nLibrary    DatabaseLibrary    log_query_results_head=10\n\n# Logging of query results is enabled (default), log head limit is disabled (log all rows).\nLibrary    DatabaseLibrary    log_query_results_head=0\n</pre>\n<h2 id=\"Commit behavior\">Commit behavior</h2>\n<p>While creating a database connection, the library doesn't explicitly set the <i>autocommit</i> behavior - so the default value of the Python DB module is used. According to Python DB API specification it should be disabled by default - which means each SQL transaction must contain a dedicated commit statement, if necessary.</p>\n<p>The library manages it for you:</p>\n<ul>\n<li>Keywords like <a href=\"#Execute%20Sql%20String\" class=\"name\">Execute SQL String</a> perform automatically a commit after running the query - or a rollback in case of error</li>\n<li>Keywords like <a href=\"#Query\" class=\"name\">Query</a> don't perform a commit, but also do a rollback in case of error</li>\n</ul>\n<p>You can turn off this automatic commit/rollback behavior using the <code>no_transaction</code> parameter. See docs of a particular keyword.</p>\n<p>It's also possible to explicitly set the <i>autocommit</i> behavior on the Python DB module level - using the <a href=\"#Set%20Auto%20Commit\" class=\"name\">Set Auto Commit</a> keyword. This has no impact on the automatic commit/rollback behavior in library keywords (described above).</p>\n<h2 id=\"Database modules compatibility\">Database modules compatibility</h2>\n<p>The library is basically compatible with any <a href=\"https://peps.python.org/pep-0249\">Python Database API Specification 2.0</a> module.</p>\n<p>However, the actual implementation in existing Python modules is sometimes quite different, which requires custom handling in the library. Therefore, there are some modules, which are \"natively\" supported in the library - and others, which may work and may not.</p>\n<h3 id=\"Python modules currently \"natively\" supported\">Python modules currently \"natively\" supported</h3>\n<h4 id=\"Oracle\">Oracle</h4>\n<p><a href=\"https://oracle.github.io/python-oracledb/\">oracledb</a></p>\n<ul>\n<li>Both thick and thin client modes are supported - you can select one using the <span class=\"name\">oracle_driver_mode</span> parameter.</li>\n<li>However, due to current limitations of the oracledb module, <b>*it's not possible to switch between thick and thin modes during a test execution session*</b> - even in different suites.</li>\n</ul>\n<p><a href=\"https://oracle.github.io/python-cx_Oracle/\">cx_Oracle</a></p>\n<h4 id=\"MySQL\">MySQL</h4>\n<ul>\n<li><a href=\"https://github.com/PyMySQL/PyMySQL\">pymysql</a></li>\n<li><a href=\"https://mysqlclient.readthedocs.io/index.html\">MySQLdb</a></li>\n</ul>\n<h4 id=\"PostgreSQL\">PostgreSQL</h4>\n<ul>\n<li><a href=\"https://www.psycopg.org/docs/\">psycopg2</a></li>\n</ul>\n<h4 id=\"MS SQL Server\">MS SQL Server</h4>\n<ul>\n<li><a href=\"https://github.com/pymssql/pymssql\">pymssql</a></li>\n</ul>\n<h4 id=\"SQLite\">SQLite</h4>\n<ul>\n<li><a href=\"https://docs.python.org/3/library/sqlite3.html\">sqlite3</a></li>\n</ul>\n<h4 id=\"Teradata\">Teradata</h4>\n<ul>\n<li><a href=\"https://github.com/teradata/PyTd\">teradata</a></li>\n</ul>\n<h4 id=\"IBM DB2\">IBM DB2</h4>\n<ul>\n<li><a href=\"https://github.com/ibmdb/python-ibmdb\">ibm_db</a></li>\n<li><a href=\"https://github.com/ibmdb/python-ibmdb\">ibm_db_dbi</a></li>\n</ul>\n<h4 id=\"ODBC\">ODBC</h4>\n<ul>\n<li><a href=\"https://github.com/mkleehammer/pyodbc\">pyodbc</a></li>\n<li><a href=\"https://github.com/pypyodbc/pypyodbc\">pypyodbc</a></li>\n</ul>\n<h4 id=\"Kingbase\">Kingbase</h4>\n<ul>\n<li>ksycopg2</li>\n</ul>", "version": "", "generated": "2024-09-27T09:52:04+00:00", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/__init__.py", "lineno": 25, "tags": [], "inits": [{"name": "__init__", "args": [{"name": "log_query_results", "type": null, "defaultValue": "True", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "log_query_results=True"}, {"name": "log_query_results_head", "type": null, "defaultValue": "50", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "log_query_results_head=50"}], "returnType": null, "doc": "<p>The library can be imported without any arguments:</p>\n<pre>\n<b>*</b> Settings <b>*</b>\nLibrary    DatabaseLibrary\n</pre>\n<p>Use optional library import parameters to disable <a href=\"#Logging%20query%20results\" class=\"name\">Logging query results</a> or setup the log head.</p>", "shortdoc": "The library can be imported without any arguments: | *** Settings *** | Library    DatabaseLibrary Use optional library import parameters to disable `Logging query results` or setup the log head.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/__init__.py", "lineno": 269}], "keywords": [{"name": "Call Stored Procedure", "args": [{"name": "procedure_name", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "procedure_name: str"}, {"name": "procedure_params", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "procedure_params: List | None = None"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "additional_output_params", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "additional_output_params: List | None = None"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "spName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "spName: str | None = None"}, {"name": "spParams", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "spParams: List | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}], "returnType": null, "doc": "<p>Calls a stored procedure <span class=\"name\">procedure_name</span> with the <span class=\"name\">procedure_params</span> - a <b>list</b> of parameters the procedure requires. <b>Returns two lists</b> - the <i>parameter values</i> and the <i>result sets</i>.</p>\n<p>Use the special <b>CURSOR</b> value for OUT params, which should receive result sets - relevant only for some databases (e.g. Oracle or PostgreSQL).</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction commit or rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<p>Use the <code>additional_output_params</code> list for OUT params of a procedure in MSSQL.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>spName</code>, <code>spParams</code> and <code>sansTran</code> are <b>deprecated</b>, please use new parameters <code>procedure_name</code>, <code>procedure_params</code> and <code>no_transaction</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h2>Handling parameters and result sets</h2>\n<p>Handling the input and output parameters and the result sets is very different depending on the database itself and on the Python database driver - i.e. how it implements the <span class=\"name\">cursor.callproc()</span> function.</p>\n<h3>Common case (e.g. MySQL)</h3>\n<p>Generally a procedure call requires all parameter values (IN and OUT) put together in a list - <span class=\"name\">procedure_params</span>.</p>\n<p>Calling the procedure returns <b>two lists</b>:</p>\n<ul>\n<li><b>Param values</b> - the copy of procedure parameters (modified, if the procedure changes the OUT params). The list is empty, if procedures receives no params.</li>\n<li><b>Result sets</b> - the list of lists, each of them containing results of some query, if the procedure returns them.</li>\n</ul>\n<h3>Oracle (oracledb, cx_Oracle)</h3>\n<p>Oracle procedures work fine with simple IN and OUT params, but require some special handling of result sets.</p>\n<h4>Simple case with IN and OUT params (no result sets)</h4>\n<p>Consider the following procedure:</p>\n<pre>\nCREATE OR REPLACE PROCEDURE\nget_second_name (person_first_name IN VARCHAR, person_second_name OUT VARCHAR) AS\nBEGIN\n  SELECT last_name\n  INTO person_second_name\n  FROM person\n  WHERE first_name = person_first_name;\nEND;\n</pre>\n<p>Calling the procedure in Robot Framework:</p>\n<pre>\n@{params}=         Create List    Jerry    OUTPUT\n# Second parameter value can be anything, it will be replaced anyway\n\n${param values}    ${result sets}=    Call Stored Procedure    get_second_name    ${params}\n# ${param values} = ['Jerry', 'Schneider']\n# ${result sets} = []\n</pre>\n<h4>Oracle procedure returning a result set</h4>\n<p>If a procedure in Oracle should return a result set, it must take OUT parameters of a special type - <i>SYS_REFCURSOR</i>.</p>\n<p>Consider the following procedure:</p>\n<pre>\nget_all_second_names (second_names_cursor OUT SYS_REFCURSOR) AS\nBEGIN\n  OPEN second_names_cursor for\n  SELECT LAST_NAME FROM person;\nEND;\n</pre>\n<p>Calling the procedure in Robot Framework requires the special value <b>CURSOR</b> for the OUT parameters, they will be converted to appropriate DB variables before calling the procedure.</p>\n<pre>\n@{params}=    Create List    CURSOR\n# The parameter must have this special value CURSOR\n\n${param values}    ${result sets}=    Call Stored Procedure    get_all_second_names    ${params}\n# ${param values} = [&lt;oracledb.Cursor on &lt;oracledb.Connection ...&gt;&gt;]\n# ${result sets} = [[('Franz Allan',), ('Jerry',)], [('See',), ('Schneider',)]]\n</pre>\n<h4>Oracle procedure returning multiple result sets</h4>\n<p>If a procedure takes multiple OUT parameters of the <i>SYS_REFCURSOR</i> type, they all must have the special <b>CURSOR</b> value when calling the procedure:</p>\n<pre>\n@{params} =        Create List         CURSOR    CURSOR\n${param values}    ${result sets} =    Call Stored Procedure    Get_all_first_and_second_names    ${params}\n# ${param values} = [&lt;oracledb.Cursor on &lt;oracledb.Connection ...&gt;&gt;, &lt;oracledb.Cursor on &lt;oracledb.Connection ...&gt;&gt;]\n# ${result sets}  = [[('Franz Allan',), ('Jerry',)], [('See',), ('Schneider',)]]\n</pre>\n<h3>PostgreSQL (psycopg2, psycopg3)</h3>\n<p>PostgreSQL doesn't return single values as params, only as result sets. It also supports special handling of result sets over OUT params of a special type (like Oracle).</p>\n<h4>Simple case with IN and OUT params (no CURSOR parameters)</h4>\n<p>Consider the following procedure:</p>\n<pre>\nCREATE FUNCTION\nget_second_name (IN person_first_name VARCHAR(20),\nOUT person_second_name VARCHAR(20))\nLANGUAGE plpgsql\nAS\n'\nBEGIN\n  SELECT LAST_NAME INTO person_second_name\n  FROM person\n  WHERE FIRST_NAME = person_first_name;\nEND\n';\n</pre>\n<p>Calling the procedure in Robot Framework:</p>\n<pre>\n@{params}=    Create List    Jerry\n${param values}    ${result sets}=    Call Stored Procedure    get_second_name    ${params}\n# ${param values} = ['Jerry']\n# ${result sets} = [[('Schneider',)]]\n</pre>\n<h4>PostgreSQL procedure with CURSOR parameters</h4>\n<p>If a procedure in PostgreSQL should return a proper result set, it must take OUT parameters of a special type - <i>refcursor</i>.</p>\n<p>Consider the following procedure:</p>\n<pre>\nCREATE FUNCTION\nget_all_first_and_second_names(result1 refcursor, result2 refcursor)\nRETURNS SETOF refcursor\nLANGUAGE plpgsql\nAS\n'\nBEGIN\n  OPEN result1 FOR SELECT FIRST_NAME FROM person;\n  RETURN NEXT result1;\n  OPEN result2 FOR SELECT LAST_NAME FROM person;\n  RETURN NEXT result2;\nEND\n';\n</pre>\n<p>Calling the procedure in Robot Framework requires the special value <b>CURSOR</b> for the OUT parameters, they will be converted to appropriate DB variables before calling the procedure.</p>\n<pre>\n@{params}=    Create List    CURSOR    CURSOR\n# The parameters must have this special value CURSOR\n\n${param values}    ${result sets}=    Call Stored Procedure    get_all_first_and_second_names    ${params}\n# ${param values} = ['CURSOR_0', 'CURSOR_1']\n# ${result sets} = [[('Franz Allan',), ('Jerry',)], [('See',), ('Schneider',)]\n</pre>\n<h3>MS SQL Server (pymssql)</h3>\n<p>The <i>pymssql</i> driver doesn't natively support getting the OUT parameter values after calling a procedure.</p>\n<ul>\n<li>This requires special handling of OUT parameters using the <span class=\"name\">additional_output_params</span> argument.</li>\n<li>Furthermore, it's not possible to fetch the OUT parameter values for a procedure, which returns a result set AND has OUT parameters.</li>\n</ul>\n<h4>Simple case with IN and OUT params (no result sets)</h4>\n<p>Consider the following procedure:</p>\n<pre>\nCREATE PROCEDURE\nreturn_out_param_without_result_sets\n@my_input VARCHAR(20),\n@my_output INT OUTPUT\nAS\nBEGIN\n IF @my_input = 'give me 1'\n    BEGIN\n        SELECT @my_output = 1;\n    END\n    ELSE\n    BEGIN\n        SELECT @my_output = 0;\n    END\nEND;\n</pre>\n<p>Calling the procedure in Robot Framework requires putting the IN parameters as usual in the <span class=\"name\">procedure_params</span> argument, but the sample values of OUT parameters must be put in the argument <span class=\"name\">additional_output_params</span>.</p>\n<pre>\n@{params}=    Create List    give me 1\n@{out_params}=    Create List    ${9}\n${param values}    ${result sets}=    Call Stored Procedure    return_out_param_without_result_sets\n...    ${params}    additional_output_params=${out_params}\n# ${result sets} = []\n# ${param values} = ('give me 1', 1)\n</pre>\n<p>The library uses the sample values in the <span class=\"name\">additional_output_params</span> list to determine the number and the type of OUT parameters - so they are type-sensitive, the type must be the same as in the procedure itself.</p>\n<h4>MS SQL procedure returning a result set (no OUT params)</h4>\n<p>If a procedure doesn't have any OUT params and returns only result sets, they are handled in a normal way. Consider the following procedure:</p>\n<pre>\nCREATE PROCEDURE get_all_first_and_second_names\nAS\nBEGIN\n  SELECT FIRST_NAME FROM person;\n  SELECT LAST_NAME FROM person;\n  RETURN;\nEND;\n</pre>\n<p>Calling the procedure in Robot Framework:</p>\n<pre>\n${param values}    ${result sets}=    Call Stored Procedure    get_all_first_and_second_names\n${param values} = ()\n${result sets} = [[('Franz Allan',), ('Jerry',)], [('See',), ('Schneider',)]]\n</pre>\n<h4>MS SQL procedure returning result sets AND OUT params</h4>\n<p>This case is <b>not fully supported</b> by the library - the OUT params won't be fetched.</p>", "shortdoc": "Calls a stored procedure `procedure_name` with the `procedure_params` - a *list* of parameters the procedure requires. *Returns two lists* - the _parameter values_ and the _result sets_.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 420}, {"name": "Check If Exists In Database", "args": [{"name": "select_statement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "select_statement: str"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "NAMED_ONLY", "required": false, "repr": "no_transaction: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if any row would be returned by given the input <code>select_statement</code>. If there are no results, then this will throw an AssertionError.</p>\n<p>Set optional input <code>no_transaction</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td></td>\n</tr>\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>no_transaction=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n</tr>\n<tr>\n<td>Check If Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 29, "deprecated": true}, {"name": "Check If Not Exists In Database", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>This is the negation of <span class=\"name\">check_if_exists_in_database</span>.</p>\n<p>Check if no rows would be returned by given the input <code>selectStatement</code>. If there are any results, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td></td>\n</tr>\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n</tr>\n<tr>\n<td>Check If Not Exists In Database</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 69, "deprecated": true}, {"name": "Check Query Result", "args": [{"name": "select_statement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "select_statement: str"}, {"name": "assertion_operator", "type": {"name": "AssertionOperator", "typedoc": "AssertionOperator", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "assertion_operator: AssertionOperator"}, {"name": "expected_value", "type": {"name": "Any", "typedoc": "Any", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "expected_value: Any"}, {"name": "row", "type": null, "defaultValue": "0", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "row=0"}, {"name": "col", "type": null, "defaultValue": "0", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "col=0"}, {"name": "assertion_message", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "assertion_message: str | None = None"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "retry_timeout", "type": null, "defaultValue": "0 seconds", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "retry_timeout=0 seconds"}, {"name": "retry_pause", "type": null, "defaultValue": "0.5 seconds", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "retry_pause=0.5 seconds"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "selectStatement", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "selectStatement: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}], "returnType": null, "doc": "<p>Check value in query result returned from <code>select_statement</code> using <code>assertion_operator</code> and <code>expected_value</code>. The value position in results can be adjusted using <code>row</code> and <code>col</code> parameters (0-based). See <a href=\"#Inline%20assertions\" class=\"name\">Inline assertions</a> for more details.</p>\n<p><b>The assertion in this keyword is type sensitive!</b> The <code>expected_value</code> is taken as a string, no argument conversion is performed. Use RF syntax like <code>${1}</code> for numeric values.</p>\n<p>Use optional <code>assertion_message</code> to override the default error message.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Use <code>retry_timeout</code> and <code>retry_pause</code> parameters to enable waiting for assertion to pass. See <a href=\"#Retry%20mechanism\" class=\"name\">Retry mechanism</a> for more details.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>selectStatement</code> and <code>sansTran</code> are <b>deprecated</b>, please use new parameters <code>select_statement</code> and <code>no_transaction</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name, last_name FROM person</td>\n<td><b>==</b></td>\n<td>Schneider</td>\n<td>row=1</td>\n<td>col=1</td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>==</b></td>\n<td>2</td>\n<td># Fails, if query returns an integer value</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>==</b></td>\n<td>${2}</td>\n<td># Works, if query returns an integer value</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>equal</b></td>\n<td>Franz Allan</td>\n<td>assertion_message=my error message</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>inequal</b></td>\n<td>John</td>\n<td>alias=my_alias</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n<td>no_transaction=True</td>\n<td></td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>Check Query Result</td>\n<td>SELECT first_name FROM person</td>\n<td><b>contains</b></td>\n<td>Allan</td>\n<td>parameters=${parameters}</td>\n<td></td>\n</tr>\n</table>", "shortdoc": "Check value in query result returned from ``select_statement`` using ``assertion_operator`` and ``expected_value``. The value position in results can be adjusted using ``row`` and ``col`` parameters (0-based). See `Inline assertions` for more details.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 332}, {"name": "Check Row Count", "args": [{"name": "select_statement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "select_statement: str"}, {"name": "assertion_operator", "type": {"name": "AssertionOperator", "typedoc": "AssertionOperator", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "assertion_operator: AssertionOperator"}, {"name": "expected_value", "type": {"name": "int", "typedoc": "integer", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "expected_value: int"}, {"name": "assertion_message", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "assertion_message: str | None = None"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "retry_timeout", "type": null, "defaultValue": "0 seconds", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "retry_timeout=0 seconds"}, {"name": "retry_pause", "type": null, "defaultValue": "0.5 seconds", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "retry_pause=0.5 seconds"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "selectStatement", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "selectStatement: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}], "returnType": null, "doc": "<p>Check the number of rows returned from <code>select_statement</code> using <code>assertion_operator</code> and <code>expected_value</code>. See <a href=\"#Inline%20assertions\" class=\"name\">Inline assertions</a> for more details.</p>\n<p>Use <code>assertion_message</code> to override the default error message.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Use <code>retry_timeout</code> and <code>retry_pause</code> parameters to enable waiting for assertion to pass. See <a href=\"#Retry%20mechanism\" class=\"name\">Retry mechanism</a> for more details.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>selectStatement</code> and <code>sansTran</code> are <b>deprecated</b>, please use new parameters <code>select_statement</code> and <code>no_transaction</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>==</b></td>\n<td>1</td>\n<td></td>\n</tr>\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>&gt;=</b></td>\n<td>2</td>\n<td>assertion_message=my error message</td>\n</tr>\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>inequal</b></td>\n<td>3</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td><b>less than</b></td>\n<td>4</td>\n<td>no_transaction=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>Check Row Count</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td><b>equals</b></td>\n<td>5</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "Check the number of rows returned from ``select_statement`` using ``assertion_operator`` and ``expected_value``. See `Inline assertions` for more details.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 269}, {"name": "Connect To Database", "args": [{"name": "db_module", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_module: str | None = None"}, {"name": "db_name", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_name: str | None = None"}, {"name": "db_user", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_user: str | None = None"}, {"name": "db_password", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_password: str | None = None"}, {"name": "db_host", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_host: str | None = None"}, {"name": "db_port", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "int", "typedoc": "integer", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_port: int | None = None"}, {"name": "db_charset", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_charset: str | None = None"}, {"name": "odbc_driver", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "odbc_driver: str | None = None"}, {"name": "config_file", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "config_file: str | None = None"}, {"name": "oracle_driver_mode", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "oracle_driver_mode: str | None = None"}, {"name": "alias", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "default", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str = default"}, {"name": "custom_connection_params", "type": null, "defaultValue": null, "kind": "VAR_NAMED", "required": false, "repr": "**custom_connection_params"}], "returnType": null, "doc": "<p>Creates a database connection using the DB API 2.0 <code>db_module</code> and the parameters provided. Along with listed commonly used arguments (<span class=\"name\">db_name</span>, <span class=\"name\">db_host</span> etc.) you can set any other DB module specific parameters as key/value pairs.</p>\n<p>Use <code>config_file</code> to provide a path to configuration file with connection parameters to be used along with / instead of keyword arguments. If no specified, it defaults to <span class=\"name\">./resources/db.cfg</span>. See <a href=\"#Using%20configuration%20file\" class=\"name\">Using configuration file</a> for more details.</p>\n<p>All params are optional, although <code>db_module</code> must be set - either as keyword argument or in config file. If some of the listed keyword arguments (<span class=\"name\">db_name</span>, <span class=\"name\">db_host</span> etc.) are not provided (i.e. left on default value <a href=\"#type-None\" class=\"name\">None</a>), they are normally not passed to the Python DB module at all, except:</p>\n<ul>\n<li><i>db_port</i> - commonly used port number for known databases is set as fallback</li>\n<li><i>db_charset</i> - <i>UTF8</i> is used as fallback for <i>pymysql</i>, <i>pymssql</i> and <i>pyodbc</i></li>\n<li><i>oracle_driver_mode</i> - <i>thin</i> is used as fallback for <i>oracledb</i></li>\n</ul>\n<p>Other custom params from keyword arguments and config file are passed to the Python DB module as provided - normally as arguments for the <i>connect()</i> function. However, when using <b>pyodbc</b>, the connection is established using a connection string - so all the custom params are added into it instead of function arguments.</p>\n<p>Set <code>alias</code> for <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>. If the same alias is given twice, then previous connection will be overridden.</p>\n<p>The <code>oracle_driver_mode</code> is used to select the <b>oracledb</b> client mode. Allowed values are:</p>\n<ul>\n<li><i>thin</i> (default if omitted)</li>\n<li><i>thick</i></li>\n<li><i>thick,lib_dir=&lt;PATH_TO_ORACLE_CLIENT&gt;</i></li>\n</ul>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>dbapiModuleName</code>, <code>dbName</code>, <code>dbUsername</code>, <code>dbPassword</code>, <code>dbHost</code>, <code>dbPort</code>, <code>dbCharset</code>, <code>dbDriver</code>, <code>dbConfigFile</code> and <code>driverMode</code> are <b>deprecated</b>, please use new parameters <code>db_module</code>, <code>db_name</code>, <code>db_user</code>, <code>db_password</code>, <code>db_host</code>, <code>db_port</code>, <code>db_charset</code>, <code>odbc_driver</code>, <code>config_file</code> and <code>oracle_driver_mode</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Connect To Database</td>\n<td>psycopg2</td>\n<td>my_db</td>\n<td>user</td>\n<td>pass</td>\n<td>tiger.foobar.com</td>\n<td>5432</td>\n<td></td>\n</tr>\n<tr>\n<td>Connect To Database</td>\n<td>psycopg2</td>\n<td>my_db</td>\n<td>user</td>\n<td>pass</td>\n<td>tiger.foobar.com</td>\n<td>5432</td>\n<td>my_custom_param=value</td>\n</tr>\n<tr>\n<td>Connect To Database</td>\n<td>psycopg2</td>\n<td>my_db</td>\n<td>user</td>\n<td>pass</td>\n<td>tiger.foobar.com</td>\n<td>5432</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Connect To Database</td>\n<td>config_file=my_db_params.cfg</td>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n</table>", "shortdoc": "Creates a database connection using the DB API 2.0 ``db_module`` and the parameters provided. Along with listed commonly used arguments (`db_name`, `db_host` etc.) you can set any other DB module specific parameters as key/value pairs.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 175}, {"name": "Connect To Database Using Custom Connection String", "args": [{"name": "db_module", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_module: str | None = None"}, {"name": "db_connect_string", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_connect_string: str = "}, {"name": "alias", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "default", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str = default"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "dbapiModuleName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "dbapiModuleName: str | None = None"}], "returnType": null, "doc": "<p>Loads the DB API 2.0 module given <code>db_module</code> then uses it to connect to the database using the <code>db_connect_string</code> (parsed as single connection string or URI).</p>\n<p>Use <a href=\"#Connect%20To%20Database\" class=\"name\">Connect To Database</a> for passing custom connection params as named arguments.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameter <code>dbapiModuleName</code> is <b>deprecated</b>, please use new parameter <code>db_module</code> instead.</p>\n<p><b>The old parameter will be removed in future versions.</b></p>\n<p>Example usage:</p>\n<table border=\"1\">\n<tr>\n<td>Connect To Database Using Custom Connection String</td>\n<td>psycopg2</td>\n<td><a href=\"postgresql://postgres:s3cr3t@tiger.foobar.com:5432/my_db_test\">postgresql://postgres:s3cr3t@tiger.foobar.com:5432/my_db_test</a></td>\n</tr>\n<tr>\n<td>Connect To Database Using Custom Connection String</td>\n<td>oracledb</td>\n<td>username/pass@localhost:1521/orclpdb</td>\n</tr>\n</table>", "shortdoc": "Loads the DB API 2.0 module given ``db_module`` then uses it to connect to the database using the ``db_connect_string`` (parsed as single connection string or URI).", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 512}, {"name": "Connect To Database Using Custom Params", "args": [{"name": "db_module", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_module: str | None = None"}, {"name": "db_connect_string", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "db_connect_string: str = "}, {"name": "alias", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "default", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str = default"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "dbapiModuleName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "dbapiModuleName: str | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Connect%20To%20Database\" class=\"name\">Connect To Database</a> keyword with custom parameters instead. The deprecated keyword will be removed in future versions.</p>\n<p>Loads the DB API 2.0 module given <code>db_module</code> then uses it to connect to the database using the map string <code>db_connect_string</code> (parsed as a list of named arguments).</p>\n<p>Use <span class=\"name\">connect_to_database_using_custom_connection_string</span> for passing all params in a single connection string or URI.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameter <code>dbapiModuleName</code> is <b>deprecated</b>, please use new parameter <code>db_module</code> instead.</p>\n<p><b>The old parameter will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Connect To Database Using Custom Params</td>\n<td>psycopg2</td>\n<td>database='my_db_test', user='postgres', password='s3cr3t', host='tiger.foobar.com', port=5432</td>\n</tr>\n<tr>\n<td>Connect To Database Using Custom Params</td>\n<td>jaydebeapi</td>\n<td>'oracle.jdbc.driver.OracleDriver', 'my_db_test', 'system', 's3cr3t'</td>\n</tr>\n<tr>\n<td>Connect To Database Using Custom Params</td>\n<td>oracledb</td>\n<td>user=\"username\", password=\"pass\", dsn=\"localhost/orclpdb\"</td>\n</tr>\n<tr>\n<td>Connect To Database Using Custom Params</td>\n<td>sqlite3</td>\n<td>database=\"./my_database.db\", isolation_level=None</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Connect To Database` keyword with custom parameters instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 469, "deprecated": true}, {"name": "Delete All Rows From Table", "args": [{"name": "table_name", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "table_name: str"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "tableName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "tableName: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}], "returnType": null, "doc": "<p>Deletes all rows from table with <code>table_name</code>.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction commit or rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>tableName</code> and <code>sansTran</code> are <b>deprecated</b>, please use new parameters <code>table_name</code> and <code>no_transaction</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Delete All Rows From Table</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>Delete All Rows From Table</td>\n<td>person</td>\n<td>no_transaction=True</td>\n</tr>\n<tr>\n<td>Delete All Rows From Table</td>\n<td>person</td>\n<td>alias=my_alias</td>\n</tr>\n</table>", "shortdoc": "Deletes all rows from table with ``table_name``.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 197}, {"name": "Description", "args": [{"name": "select_statement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "select_statement: str"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "selectStatement", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "selectStatement: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}], "returnType": null, "doc": "<p>Runs a query with the <code>select_statement</code> to determine the table description.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>selectStatement</code> and <code>sansTran</code> are <b>deprecated</b>, please use new parameters <code>select_statement</code> and <code>no_transaction</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>${Person table description}=</td>\n<td>Description</td>\n<td>select LAST_NAME from person</td>\n<td></td>\n</tr>\n<tr>\n<td>${Person table description}=</td>\n<td>Description</td>\n<td>select LAST_NAME from person</td>\n<td>no_transaction=True</td>\n</tr>\n<tr>\n<td>${Person table description}=</td>\n<td>Description</td>\n<td>select LAST_NAME from person</td>\n<td>alias=postgres</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>${Person table description}=</td>\n<td>Description</td>\n<td>SELECT * FROM %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "Runs a query with the ``select_statement`` to determine the table description.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 148}, {"name": "Disconnect From All Databases", "args": [], "returnType": null, "doc": "<p>Disconnects from all the databases - useful when testing with multiple database connections (aliases).</p>", "shortdoc": "Disconnects from all the databases - useful when testing with multiple database connections (aliases).", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 569}, {"name": "Disconnect From Database", "args": [{"name": "error_if_no_connection", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "error_if_no_connection: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}], "returnType": null, "doc": "<p>Disconnects from the database.</p>\n<p>By default, it's not an error if there was no open database connection - suitable for usage as a teardown. However, you can enforce it using the <code>error_if_no_connection</code> parameter.</p>\n<p>Use <code>alias</code> to specify what connection should be closed if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Disconnect From Database</td>\n<td></td>\n</tr>\n<tr>\n<td>Disconnect From Database</td>\n<td>alias=postgres</td>\n</tr>\n</table>", "shortdoc": "Disconnects from the database.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 546}, {"name": "Execute Sql Script", "args": [{"name": "script_path", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "script_path: str"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "split", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "True", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "split: bool = True"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "sqlScriptFileName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sqlScriptFileName: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}], "returnType": null, "doc": "<p>Executes the content of the SQL script file loaded from <span class=\"name\">script_path</span> as SQL commands.</p>\n<p>SQL commands are expected to be delimited by a semicolon (';') - they will be split and executed separately. Set <code>split</code> to <i>False</i> to disable this behavior  - in this case the entire script content will be passed to the database module for execution as a single command.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction commit or rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>sqlScriptFileName</code> and <code>sansTran</code> are <b>deprecated</b>, please use new parameters <code>script_path</code> and <code>no_transaction</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Execute SQL Script</td>\n<td>insert_data_in_person_table.sql</td>\n<td></td>\n</tr>\n<tr>\n<td>Execute SQL Script</td>\n<td>insert_data_in_person_table.sql</td>\n<td>no_transaction=True</td>\n</tr>\n<tr>\n<td>Execute SQL Script</td>\n<td>insert_data_in_person_table.sql</td>\n<td>alias=postgres</td>\n</tr>\n<tr>\n<td>Execute SQL Script</td>\n<td>insert_data_in_person_table.sql</td>\n<td>split=False</td>\n</tr>\n</table>", "shortdoc": "Executes the content of the SQL script file loaded from `script_path` as SQL commands.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 243}, {"name": "Execute Sql String", "args": [{"name": "sql_string", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "sql_string: str"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "omit_trailing_semicolon", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "omit_trailing_semicolon: bool | None = None"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "sqlString", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sqlString: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}, {"name": "omitTrailingSemicolon", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "omitTrailingSemicolon: bool | None = None"}], "returnType": null, "doc": "<p>Executes the <code>sql_string</code> as a single SQL command.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction commit or rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Use <code>omit_trailing_semicolon</code> for explicit instruction, if the trailing semicolon (;) at the SQL string end should be removed or not:</p>\n<ul>\n<li>Some database modules (e.g. Oracle) throw an exception, if you leave a semicolon at the string end</li>\n<li>However, there are exceptional cases, when you need it even for Oracle - e.g. at the end of a PL/SQL block</li>\n<li>If not explicitly specified, it's decided based on the current database module in use. For Oracle, the semicolon is removed by default.</li>\n</ul>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>sqlString</code>, <code>sansTran</code> and <code>omitTrailingSemicolon</code> are <b>deprecated</b>, please use new parameters <code>sql_string</code>, <code>no_transaction</code> and <code>omit_trailing_semicolon</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Execute Sql String</td>\n<td>DELETE FROM person_employee_table; DELETE FROM person_table</td>\n<td></td>\n</tr>\n<tr>\n<td>Execute Sql String</td>\n<td>DELETE FROM person_employee_table; DELETE FROM person_table</td>\n<td>no_transaction=True</td>\n</tr>\n<tr>\n<td>Execute Sql String</td>\n<td>DELETE FROM person_employee_table; DELETE FROM person_table</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Execute Sql String</td>\n<td>CREATE PROCEDURE proc AS BEGIN DBMS_OUTPUT.PUT_LINE('Hello!'); END;</td>\n<td>omit_trailing_semicolon=False</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>person_employee_table</td>\n</tr>\n<tr>\n<td>Execute Sql String</td>\n<td>DELETE FROM %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "Executes the ``sql_string`` as a single SQL command.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 364}, {"name": "Query", "args": [{"name": "select_statement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "select_statement: str"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "return_dict", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "return_dict: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "selectStatement", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "selectStatement: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}, {"name": "returnAsDict", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "returnAsDict: bool | None = None"}], "returnType": null, "doc": "<p>Runs a query with the <code>select_statement</code> and returns the result as list of rows. The type of row values depends on the database module - usually they are tuples or tuple-like objects.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Set <code>return_dict</code> to <i>True</i> to explicitly convert the return values into list of dictionaries.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>selectStatement</code>, <code>sansTran</code> and <code>returnAsDict</code> are <b>deprecated</b>, please use new parameters <code>select_statement</code>, <code>no_transaction</code> and <code>return_dict</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>${Results}=</td>\n<td>Query</td>\n<td>select LAST_NAME from person</td>\n<td></td>\n</tr>\n<tr>\n<td>${Results}=</td>\n<td>Query</td>\n<td>select LAST_NAME from person</td>\n<td>no_transaction=True</td>\n</tr>\n<tr>\n<td>${Results}=</td>\n<td>Query</td>\n<td>select LAST_NAME from person</td>\n<td>return_dict=True</td>\n</tr>\n<tr>\n<td>${Results}=</td>\n<td>Query</td>\n<td>select LAST_NAME from person</td>\n<td>alias=postgres</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>${Results}=</td>\n<td>Query</td>\n<td>SELECT * FROM %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "Runs a query with the ``select_statement`` and returns the result as list of rows. The type of row values depends on the database module - usually they are tuples or tuple-like objects.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 38}, {"name": "Row Count", "args": [{"name": "select_statement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "select_statement: str"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "selectStatement", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "selectStatement: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}], "returnType": null, "doc": "<p>Runs a query with the <code>select_statement</code> and returns the number of rows in the result.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>selectStatement</code> and <code>sansTran</code> are <b>deprecated</b>, please use new parameters <code>select_statement</code> and <code>no_transaction</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>${Rows}=</td>\n<td>Row Count</td>\n<td>select LAST_NAME from person</td>\n<td></td>\n</tr>\n<tr>\n<td>${Rows}=</td>\n<td>Row Count</td>\n<td>select LAST_NAME from person</td>\n<td>no_transaction=True</td>\n</tr>\n<tr>\n<td>${Rows}=</td>\n<td>Row Count</td>\n<td>select LAST_NAME from person</td>\n<td>alias=postgres</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>${Rows}=</td>\n<td>Row Count</td>\n<td>SELECT * FROM %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "Runs a query with the ``select_statement`` and returns the number of rows in the result.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 95}, {"name": "Row Count Is 0", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if any rows are returned from the submitted <code>selectStatement</code>. If there are, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = 'Franz Allan'</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n</tr>\n<tr>\n<td>Row Count is 0</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 110, "deprecated": true}, {"name": "Row Count Is Equal To X", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "numRows", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "numRows: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if the number of rows returned from <code>selectStatement</code> is equal to the value submitted. If not, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person</td>\n<td>1</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person</td>\n<td>3</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Equal To X</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>0</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 148, "deprecated": true}, {"name": "Row Count Is Greater Than X", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "numRows", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "numRows: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if the number of rows returned from <code>selectStatement</code> is greater than the value submitted. If not, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>The default error message can be overridden with the <code>msg</code> argument.</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>0</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person</td>\n<td>1</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Greater Than X</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>0</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 188, "deprecated": true}, {"name": "Row Count Is Less Than X", "args": [{"name": "selectStatement", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selectStatement: str"}, {"name": "numRows", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "numRows: str"}, {"name": "sansTran", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "sansTran: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "parameters", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Tuple", "typedoc": "tuple", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "parameters: Tuple | None = None"}], "returnType": null, "doc": "<p><b>DEPRECATED</b> Use new <a href=\"#Check%20Row%20Count\" class=\"name\">Check Row Count</a> keyword with assertion engine instead. The deprecated keyword will be removed in future versions.</p>\n<p>Check if the number of rows returned from <code>selectStatement</code> is less than the value submitted. If not, then this will throw an AssertionError.</p>\n<p>Set optional input <code>sansTran</code> to <i>True</i> to run command without an explicit transaction commit or rollback.</p>\n<p>Using optional <code>msg</code> to override the default error message:</p>\n<p>Use optional <code>alias</code> parameter to specify what connection should be used for the query if you have more than one connection open.</p>\n<p>Use <code>parameters</code> for query variable substitution (variable substitution syntax may be different depending on the database client).</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>1</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>2</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>3</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = 'John'</td>\n<td>4</td>\n<td>sansTran=True</td>\n</tr>\n<tr>\n<td>@{parameters}</td>\n<td>Create List</td>\n<td>John</td>\n<td></td>\n</tr>\n<tr>\n<td>Row Count Is Less Than X</td>\n<td>SELECT id FROM person WHERE first_name = %s</td>\n<td>5</td>\n<td>parameters=${parameters}</td>\n</tr>\n</table>", "shortdoc": "*DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead. The deprecated keyword will be removed in future versions.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 228, "deprecated": true}, {"name": "Set Auto Commit", "args": [{"name": "auto_commit", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "True", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "auto_commit: bool = True"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "autoCommit", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "autoCommit: bool | None = None"}], "returnType": null, "doc": "<p>Explicitly sets the autocommit behavior of the database connection to <code>auto_commit</code>. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameter <code>autoCommit</code> is <b>deprecated</b>, please use new parameter <code>auto_commit</code> instead.</p>\n<p><b>The old parameter will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<pre>\nSet Auto Commit\nSet Auto Commit | False |\nSet Auto Commit | True  | alias=postgres |\n</pre>", "shortdoc": "Explicitly sets the autocommit behavior of the database connection to ``auto_commit``. See `Commit behavior` for details.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 579}, {"name": "Set Logging Query Results", "args": [{"name": "enabled", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "enabled: bool | None = None"}, {"name": "log_head", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "int", "typedoc": "integer", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "log_head: int | None = None"}], "returnType": null, "doc": "<p>Allows to enable/disable logging of query results and to adjust the log head value.</p>\n<ul>\n<li>Overrides the values, which were set during the library import.</li>\n<li>See <a href=\"#Logging%20query%20results\" class=\"name\">Logging query results</a> for details.</li>\n</ul>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Set Logging Query Results</td>\n<td>enabled=False</td>\n<td></td>\n</tr>\n<tr>\n<td>Set Logging Query Results</td>\n<td>enabled=True</td>\n<td>log_head=0</td>\n</tr>\n<tr>\n<td>Set Logging Query Results</td>\n<td>log_head=10</td>\n<td></td>\n</tr>\n</table>", "shortdoc": "Allows to enable/disable logging of query results and to adjust the log head value. - Overrides the values, which were set during the library import. - See `Logging query results` for details.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/query.py", "lineno": 728}, {"name": "Switch Database", "args": [{"name": "alias", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "alias: str"}], "returnType": null, "doc": "<p>Switch the default database connection to <code>alias</code>.</p>\n<p>Examples:</p>\n<table border=\"1\">\n<tr>\n<td>Switch Database</td>\n<td>my_alias</td>\n</tr>\n<tr>\n<td>Switch Database</td>\n<td>alias=my_alias</td>\n</tr>\n</table>", "shortdoc": "Switch the default database connection to ``alias``.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/connection_manager.py", "lineno": 602}, {"name": "Table Must Exist", "args": [{"name": "table_name", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "table_name: str"}, {"name": "no_transaction", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "no_transaction: bool = False"}, {"name": "msg", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "msg: str | None = None"}, {"name": "alias", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias: str | None = None"}, {"name": "", "type": null, "defaultValue": null, "kind": "NAMED_ONLY_MARKER", "required": false, "repr": "*"}, {"name": "tableName", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "tableName: str | None = None"}, {"name": "sansTran", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "NAMED_ONLY", "required": false, "repr": "sansTran: bool | None = None"}], "returnType": null, "doc": "<p>Check if the table with <span class=\"name\">table_name</span> exists in the database.</p>\n<p>Use <code>msg</code> for custom error message.</p>\n<p>Set <code>no_transaction</code> to <i>True</i> to run command without explicit transaction rollback in case of error. See <a href=\"#Commit%20behavior\" class=\"name\">Commit behavior</a> for details.</p>\n<p>Use <code>alias</code> to specify what connection should be used if <a href=\"#Handling%20multiple%20database%20connections\" class=\"name\">Handling multiple database connections</a>.</p>\n<h4>Some parameters were renamed in version 2.0</h4>\n<p>The old parameters <code>tableName</code> and <code>sansTran</code> are <b>deprecated</b>, please use new parameters <code>table_name</code> and <code>no_transaction</code> instead.</p>\n<p><b>The old parameters will be removed in future versions.</b></p>\n<h4>Examples</h4>\n<table border=\"1\">\n<tr>\n<td>Table Must Exist</td>\n<td>person</td>\n<td></td>\n</tr>\n<tr>\n<td>Table Must Exist</td>\n<td>person</td>\n<td>msg=my error message</td>\n</tr>\n<tr>\n<td>Table Must Exist</td>\n<td>person</td>\n<td>alias=my_alias</td>\n</tr>\n<tr>\n<td>Table Must Exist</td>\n<td>person</td>\n<td>no_transaction=True</td>\n</tr>\n</table>", "shortdoc": "Check if the table with `table_name` exists in the database.", "tags": [], "source": "/Users/andremochinin/DEV/Robotframework-Database-Library/src/DatabaseLibrary/assertion.py", "lineno": 416}], "typedocs": [{"type": "Standard", "name": "Any", "doc": "<p>Any value is accepted. No conversion is done.</p>", "usages": ["Check Query Result"], "accepts": ["Any"]}, {"type": "Enum", "name": "AssertionOperator", "doc": "<p>Currently supported assertion operators are:</p>\n<table border=\"1\">\n<tr>\n<th>Operator</th>\n<th>Alternative Operators</th>\n<th>Description</th>\n<th>Validate Equivalent</th>\n</tr>\n<tr>\n<td><code>==</code></td>\n<td><code>equal</code>, <code>equals</code>, <code>should be</code></td>\n<td>Checks if returned value is equal to expected value.</td>\n<td><code>value == expected</code></td>\n</tr>\n<tr>\n<td><code>!=</code></td>\n<td><code>inequal</code>, <code>should not be</code></td>\n<td>Checks if returned value is not equal to expected value.</td>\n<td><code>value != expected</code></td>\n</tr>\n<tr>\n<td><code>&gt;</code></td>\n<td><code>greater than</code></td>\n<td>Checks if returned value is greater than expected value.</td>\n<td><code>value &gt; expected</code></td>\n</tr>\n<tr>\n<td><code>&gt;=</code></td>\n<td></td>\n<td>Checks if returned value is greater than or equal to expected value.</td>\n<td><code>value &gt;= expected</code></td>\n</tr>\n<tr>\n<td><code>&lt;</code></td>\n<td><code>less than</code></td>\n<td>Checks if returned value is less than expected value.</td>\n<td><code>value &lt; expected</code></td>\n</tr>\n<tr>\n<td><code>&lt;=</code></td>\n<td></td>\n<td>Checks if returned value is less than or equal to expected value.</td>\n<td><code>value &lt;= expected</code></td>\n</tr>\n<tr>\n<td><code>*=</code></td>\n<td><code>contains</code></td>\n<td>Checks if returned value contains expected value as substring.</td>\n<td><code>expected in value</code></td>\n</tr>\n<tr>\n<td></td>\n<td><code>not contains</code></td>\n<td>Checks if returned value does not contain expected value as substring.</td>\n<td><code>expected in value</code></td>\n</tr>\n<tr>\n<td><code>^=</code></td>\n<td><code>should start with</code>, <code>starts</code></td>\n<td>Checks if returned value starts with expected value.</td>\n<td><code>re.search(f\"^{expected}\", value)</code></td>\n</tr>\n<tr>\n<td><code>$=</code></td>\n<td><code>should end with</code>, <code>ends</code></td>\n<td>Checks if returned value ends with expected value.</td>\n<td><code>re.search(f\"{expected}$\", value)</code></td>\n</tr>\n<tr>\n<td><code>matches</code></td>\n<td></td>\n<td>Checks if given RegEx matches minimum once in returned value.</td>\n<td><code>re.search(expected, value)</code></td>\n</tr>\n<tr>\n<td><code>validate</code></td>\n<td></td>\n<td>Checks if given Python expression evaluates to <code>True</code>.</td>\n<td></td>\n</tr>\n<tr>\n<td><code>evaluate</code></td>\n<td><code>then</code></td>\n<td>When using this operator, the keyword does return the evaluated Python expression.</td>\n<td></td>\n</tr>\n</table>\n<p>Currently supported formatters for assertions are:</p>\n<table border=\"1\">\n<tr>\n<th>Formatter</th>\n<th>Description</th>\n</tr>\n<tr>\n<td><code>normalize spaces</code></td>\n<td>Substitutes multiple spaces to single space from the value</td>\n</tr>\n<tr>\n<td><code>strip</code></td>\n<td>Removes spaces from the beginning and end of the value</td>\n</tr>\n<tr>\n<td><code>case insensitive</code></td>\n<td>Converts value to lower case before comparing</td>\n</tr>\n<tr>\n<td><code>apply to expected</code></td>\n<td>Applies rules also for the expected value</td>\n</tr>\n</table>\n<p>Formatters are applied to the value before assertion is performed and keywords returns a value where rule is applied. Formatter is only applied to the value which keyword returns and not all rules are valid for all assertion operators. If <code>apply to expected</code> formatter is defined, then formatters are then formatter are also applied to expected value.</p>", "usages": ["Check Query Result", "Check Row Count"], "accepts": ["string"], "members": [{"name": "equal", "value": "=="}, {"name": "equals", "value": "=="}, {"name": "==", "value": "=="}, {"name": "should be", "value": "=="}, {"name": "inequal", "value": "!="}, {"name": "!=", "value": "!="}, {"name": "should not be", "value": "!="}, {"name": "less than", "value": "<"}, {"name": "<", "value": "<"}, {"name": "greater than", "value": ">"}, {"name": ">", "value": ">"}, {"name": "<=", "value": "<="}, {"name": ">=", "value": ">="}, {"name": "contains", "value": "*="}, {"name": "not contains", "value": "not contains"}, {"name": "*=", "value": "*="}, {"name": "starts", "value": "^="}, {"name": "^=", "value": "^="}, {"name": "should start with", "value": "^="}, {"name": "ends", "value": "$="}, {"name": "should end with", "value": "$="}, {"name": "$=", "value": "$="}, {"name": "matches", "value": "$"}, {"name": "validate", "value": "validate"}, {"name": "then", "value": "then"}, {"name": "evaluate", "value": "then"}]}, {"type": "Standard", "name": "boolean", "doc": "<p>Strings <code>TRUE</code>, <code>YES</code>, <code>ON</code> and <code>1</code> are converted to Boolean <code>True</code>, the empty string as well as strings <code>FALSE</code>, <code>NO</code>, <code>OFF</code> and <code>0</code> are converted to Boolean <code>False</code>, and the string <code>NONE</code> is converted to the Python <code>None</code> object. Other strings and other accepted values are passed as-is, allowing keywords to handle them specially if needed. All string comparisons are case-insensitive.</p>\n<p>Examples: <code>TRUE</code> (converted to <code>True</code>), <code>off</code> (converted to <code>False</code>), <code>example</code> (used as-is)</p>", "usages": ["Call Stored Procedure", "Check If Exists In Database", "Check If Not Exists In Database", "Check Query Result", "Check Row Count", "Delete All Rows From Table", "Description", "Disconnect From Database", "Execute Sql Script", "Execute Sql String", "Query", "Row Count", "Row Count Is 0", "Row Count Is Equal To X", "Row Count Is Greater Than X", "Row Count Is Less Than X", "Set Auto Commit", "Set Logging Query Results", "Table Must Exist"], "accepts": ["string", "integer", "float", "None"]}, {"type": "Standard", "name": "integer", "doc": "<p>Conversion is done using Python's <a href=\"https://docs.python.org/library/functions.html#int\">int</a> built-in function. Floating point numbers are accepted only if they can be represented as integers exactly. For example, <code>1.0</code> is accepted and <code>1.1</code> is not.</p>\n<p>Starting from RF 4.1, it is possible to use hexadecimal, octal and binary numbers by prefixing values with <code>0x</code>, <code>0o</code> and <code>0b</code>, respectively.</p>\n<p>Starting from RF 4.1, spaces and underscores can be used as visual separators for digit grouping purposes.</p>\n<p>Examples: <code>42</code>, <code>-1</code>, <code>0b1010</code>, <code>10 000 000</code>, <code>0xBAD_C0FFEE</code></p>", "usages": ["Check Row Count", "Connect To Database", "Set Logging Query Results"], "accepts": ["string", "float"]}, {"type": "Standard", "name": "list", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#list\">list</a> literals. They are converted to actual lists using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including lists and other containers.</p>\n<p>If the type has nested types like <code>list[int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>['one', 'two']</code>, <code>[('one', 1), ('two', 2)]</code></p>", "usages": ["Call Stored Procedure"], "accepts": ["string", "Sequence"]}, {"type": "Standard", "name": "None", "doc": "<p>String <code>NONE</code> (case-insensitive) is converted to Python <code>None</code> object. Other values cause an error.</p>", "usages": ["Call Stored Procedure", "Check If Exists In Database", "Check If Not Exists In Database", "Check Query Result", "Check Row Count", "Connect To Database", "Connect To Database Using Custom Connection String", "Connect To Database Using Custom Params", "Delete All Rows From Table", "Description", "Disconnect From Database", "Execute Sql Script", "Execute Sql String", "Query", "Row Count", "Row Count Is 0", "Row Count Is Equal To X", "Row Count Is Greater Than X", "Row Count Is Less Than X", "Set Auto Commit", "Set Logging Query Results", "Table Must Exist"], "accepts": ["string"]}, {"type": "Standard", "name": "string", "doc": "<p>All arguments are converted to Unicode strings.</p>", "usages": ["Call Stored Procedure", "Check If Exists In Database", "Check If Not Exists In Database", "Check Query Result", "Check Row Count", "Connect To Database", "Connect To Database Using Custom Connection String", "Connect To Database Using Custom Params", "Delete All Rows From Table", "Description", "Disconnect From Database", "Execute Sql Script", "Execute Sql String", "Query", "Row Count", "Row Count Is 0", "Row Count Is Equal To X", "Row Count Is Greater Than X", "Row Count Is Less Than X", "Set Auto Commit", "Switch Database", "Table Must Exist"], "accepts": ["Any"]}, {"type": "Standard", "name": "tuple", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#tuple\">tuple</a> literals. They are converted to actual tuples using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including tuples and other containers.</p>\n<p>If the type has nested types like <code>tuple[str, int, int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>('one', 'two')</code>, <code>(('one', 1), ('two', 2))</code></p>", "usages": ["Check If Exists In Database", "Check If Not Exists In Database", "Check Query Result", "Check Row Count", "Description", "Execute Sql String", "Query", "Row Count", "Row Count Is 0", "Row Count Is Equal To X", "Row Count Is Greater Than X", "Row Count Is Less Than X"], "accepts": ["string", "Sequence"]}]}
 </script>
 <title></title>
 </head>
diff --git a/src/DatabaseLibrary/__init__.py b/src/DatabaseLibrary/__init__.py
index d0a8967..c89d9f8 100644
--- a/src/DatabaseLibrary/__init__.py
+++ b/src/DatabaseLibrary/__init__.py
@@ -39,8 +39,7 @@ class DatabaseLibrary(ConnectionManager, Query, Assertion):
     | pip install robotframework-databaselibrary
     Don't forget to install the required Python database module!
 
-    = Usage example =
-    == Basic usage ==
+    = Basic usage examples =
     | *** Settings ***
     | Library       DatabaseLibrary
     | Test Setup    Connect To My Oracle DB
@@ -49,26 +48,39 @@ class DatabaseLibrary(ConnectionManager, Query, Assertion):
     | Connect To My Oracle DB
     |     Connect To Database
     |     ...    oracledb
-    |     ...    dbName=db
-    |     ...    dbUsername=my_user
-    |     ...    dbPassword=my_pass
-    |     ...    dbHost=127.0.0.1
-    |     ...    dbPort=1521
+    |     ...    db_name=db
+    |     ...    db_user=my_user
+    |     ...    db_password=my_pass
+    |     ...    db_host=127.0.0.1
+    |     ...    db_port=1521
     |
     | *** Test Cases ***
+    | Get All Names
+    |     ${Rows}=    Query    select FIRST_NAME, LAST_NAME from person
+    |     Should Be Equal    ${Rows}[0][0]    Franz Allan
+    |     Should Be Equal    ${Rows}[0][1]    See
+    |     Should Be Equal    ${Rows}[1][0]    Jerry
+    |     Should Be Equal    ${Rows}[1][1]    Schneider
+    |
     | Person Table Contains Expected Records
-    |     ${output}=    Query    select LAST_NAME from person
-    |     Length Should Be    ${output}    2
-    |     Should Be Equal    ${output}[0][0]    See
-    |     Should Be Equal    ${output}[1][0]    Schneider
+    |     ${sql}=    Catenate    select LAST_NAME from person
+    |     Check Query Result    ${sql}    contains    See
+    |     Check Query Result    ${sql}    equals      Schneider    row=1
+    |
+    | Wait Until Table Gets New Record
+    |     ${sql}=    Catenate    select LAST_NAME from person
+    |     Check Row Count    ${sql}    >    2    retry_timeout=5s
     |
     | Person Table Contains No Joe
     |     ${sql}=    Catenate    SELECT id FROM person
     |     ...                    WHERE FIRST_NAME= 'Joe'
-    |     Check If Not Exists In Database    ${sql}
+    |     Check Row Count    ${sql}   ==    0
     |
 
-    == Handling multiple database connections ==
+    = Handling multiple database connections =
+    The library can handle multiple connections to different databases using *aliases*.
+    An alias is set while creating a connection and can be passed to library keywords in a corresponding argument.
+    == Example ==
     | *** Settings ***
     | Library          DatabaseLibrary
     | Test Setup       Connect To All Databases
@@ -76,9 +88,21 @@ class DatabaseLibrary(ConnectionManager, Query, Assertion):
     |
     | *** Keywords ***
     | Connect To All Databases
-    |     Connect To Database    psycopg2    db    db_user    pass    127.0.0.1    5432
+    |     Connect To Database
+    |     ...    psycopg2
+    |     ...    db_name=db
+    |     ...    db_user=db_user
+    |     ...    db_password=pass
+    |     ...    db_host=127.0.0.1
+    |     ...    db_port=5432
     |     ...    alias=postgres
-    |     Connect To Database    pymysql    db    db_user    pass    127.0.0.1    3306
+    |     Connect To Database
+    |     ...    pymysql
+    |     ...    db_name=db
+    |     ...    db_user=db_user
+    |     ...    db_password=pass
+    |     ...    db_host=127.0.0.1
+    |     ...    db_port=3306
     |     ...    alias=mysql
     |
     | *** Test Cases ***
@@ -117,25 +141,25 @@ class DatabaseLibrary(ConnectionManager, Query, Assertion):
     == Config file examples ==
     === Config file with default alias (equal to using no aliases at all) ===
     | [default]
-    | dbapiModuleName=psycopg2
-    | dbName=yourdbname
-    | dbUsername=yourusername
-    | dbPassword=yourpassword
-    | dbHost=yourhost
-    | dbPort=yourport
+    | db_module=psycopg2
+    | db_name=yourdbname
+    | db_user=yourusername
+    | db_password=yourpassword
+    | db_host=yourhost
+    | db_port=yourport
 
     === Config file with a specific alias ===
     | [myoracle]
-    | dbapiModuleName=oracledb
-    | dbName=yourdbname
-    | dbUsername=yourusername
-    | dbPassword=yourpassword
-    | dbHost=yourhost
-    | dbPort=yourport
+    | db_module=oracledb
+    | db_name=yourdbname
+    | db_user=yourusername
+    | db_password=yourpassword
+    | db_host=yourhost
+    | db_port=yourport
 
     === Config file with some params only ===
     | [default]
-    | dbPassword=mysecret
+    | db_password=mysecret
 
     === Config file with some custom DB module specific params ===
     | [default]
@@ -161,11 +185,11 @@ class DatabaseLibrary(ConnectionManager, Query, Assertion):
     The argument values are set in [http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#time-format|Robot Framework time format] -
     e.g. ``5 seconds``.
 
-    The retry mechanism is disabled by default - the ``retry_timeout`` is set to ``0``.
+    The retry mechanism is disabled by default - ``retry_timeout`` is set to ``0``.
 
     Examples:
     | Check Row Count | SELECT id FROM person | *==* | 2 | retry_timeout=10 seconds |
-    | Check Query Result | SELECT first_name FROM person | *contains* | Allan | retry_timeout=5s | retry_timeout=1s |
+    | Check Query Result | SELECT first_name FROM person | *contains* | Allan | retry_timeout=5s | retry_pause=1s |
 
     = Logging query results =
     Keywords, that fetch results of a SQL query, print the result rows as a table in RF log.
@@ -175,8 +199,8 @@ class DatabaseLibrary(ConnectionManager, Query, Assertion):
     You can also setup the limit or disable the logging during the library import.
     Examples:
 
-    | # Default behavior - logging of query results is enabled, log head is 50 rows.
     | *** Settings ***
+    | # Default behavior - logging of query results is enabled, log head is 50 rows.
     | Library    DatabaseLibrary
     |
     | # Logging of query results is disabled, log head is 50 rows (default).
@@ -188,13 +212,56 @@ class DatabaseLibrary(ConnectionManager, Query, Assertion):
     | # Logging of query results is enabled (default), log head limit is disabled (log all rows).
     | Library    DatabaseLibrary    log_query_results_head=0
 
+    = Commit behavior =
+    While creating a database connection, the library doesn't explicitly set the _autocommit_ behavior -
+    so the default value of the Python DB module is used.
+    According to Python DB API specification it should be disabled by default -
+    which means each SQL transaction must contain a dedicated commit statement, if necessary.
+
+    The library manages it for you:
+    - Keywords like `Execute SQL String` perform automatically a commit after running the query - or a rollback in case of error
+    - Keywords like `Query` don't perform a commit, but also do a rollback in case of error
+
+    You can turn off this automatic commit/rollback behavior using the ``no_transaction`` parameter.
+    See docs of a particular keyword.
+
+    It's also possible to explicitly set the _autocommit_ behavior on the Python DB module level -
+    using the `Set Auto Commit` keyword.
+    This has no impact on the automatic commit/rollback behavior in library keywords (described above).
+
     = Database modules compatibility =
     The library is basically compatible with any [https://peps.python.org/pep-0249|Python Database API Specification 2.0] module.
 
     However, the actual implementation in existing Python modules is sometimes quite different, which requires custom handling in the library.
     Therefore, there are some modules, which are "natively" supported in the library - and others, which may work and may not.
 
-    See more on the [https://github.com/MarketSquare/Robotframework-Database-Library|project page on GitHub].
+    == Python modules currently "natively" supported ==
+    === Oracle ===
+    [https://oracle.github.io/python-oracledb/|oracledb]
+    - Both thick and thin client modes are supported - you can select one using the `oracle_driver_mode` parameter.
+    - However, due to current limitations of the oracledb module, **it's not possible to switch between thick and thin modes during a test execution session** - even in different suites.
+
+    [https://oracle.github.io/python-cx_Oracle/|cx_Oracle]
+
+    === MySQL ===
+    - [https://github.com/PyMySQL/PyMySQL|pymysql]
+    - [https://mysqlclient.readthedocs.io/index.html|MySQLdb]
+    === PostgreSQL ===
+    - [https://www.psycopg.org/docs/|psycopg2]
+    === MS SQL Server ===
+    - [https://github.com/pymssql/pymssql|pymssql]
+    === SQLite ===
+    - [https://docs.python.org/3/library/sqlite3.html|sqlite3]
+    === Teradata ===
+    - [https://github.com/teradata/PyTd|teradata]
+    === IBM DB2 ===
+    - [https://github.com/ibmdb/python-ibmdb|ibm_db]
+    - [https://github.com/ibmdb/python-ibmdb|ibm_db_dbi]
+    === ODBC ===
+    - [https://github.com/mkleehammer/pyodbc|pyodbc]
+    - [https://github.com/pypyodbc/pypyodbc|pypyodbc]
+    === Kingbase ===
+    - ksycopg2
     """
 
     ROBOT_LIBRARY_SCOPE = "GLOBAL"
diff --git a/src/DatabaseLibrary/assertion.py b/src/DatabaseLibrary/assertion.py
index 256fad5..3d2fd56 100644
--- a/src/DatabaseLibrary/assertion.py
+++ b/src/DatabaseLibrary/assertion.py
@@ -18,6 +18,8 @@ from robot.api import logger
 from robot.libraries.BuiltIn import BuiltIn
 from robot.utils import timestr_to_secs
 
+from .params_decorator import renamed_args
+
 
 class Assertion:
     """
@@ -26,8 +28,9 @@ class Assertion:
 
     def check_if_exists_in_database(
         self,
-        selectStatement: str,
-        sansTran: bool = False,
+        select_statement: str,
+        *,
+        no_transaction: bool = False,
         msg: Optional[str] = None,
         alias: Optional[str] = None,
         parameters: Optional[Tuple] = None,
@@ -36,10 +39,10 @@ class Assertion:
         *DEPRECATED* Use new `Check Row Count` keyword with assertion engine instead.
         The deprecated keyword will be removed in future versions.
 
-        Check if any row would be returned by given the input ``selectStatement``. If there are no results, then this will
+        Check if any row would be returned by given the input ``select_statement``. If there are no results, then this will
         throw an AssertionError.
 
-        Set optional input ``sansTran`` to _True_ to run command without an explicit transaction
+        Set optional input ``no_transaction`` to _True_ to run command without an explicit transaction
         commit or rollback.
 
         The default error message can be overridden with the ``msg`` argument.
@@ -47,20 +50,20 @@ class Assertion:
         Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
         than one connection open.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
         depending on the database client).
 
         Examples:
         | Check If Exists In Database | SELECT id FROM person WHERE first_name = 'Franz Allan' |
         | Check If Exists In Database | SELECT id FROM person WHERE first_name = 'John' | msg=my error message |
         | Check If Exists In Database | SELECT id FROM person WHERE first_name = 'Franz Allan' | alias=my_alias |
-        | Check If Exists In Database | SELECT id FROM person WHERE first_name = 'John' | sansTran=True |
+        | Check If Exists In Database | SELECT id FROM person WHERE first_name = 'John' | no_transaction=True |
         | @{parameters} | Create List |  John |
         | Check If Exists In Database | SELECT id FROM person WHERE first_name = %s | parameters=${parameters} |
         """
-        if not self.query(selectStatement, sansTran, alias=alias, parameters=parameters):
+        if not self.query(select_statement, no_transaction, alias=alias, parameters=parameters):
             raise AssertionError(
-                msg or f"Expected to have have at least one row, but got 0 rows from: '{selectStatement}'"
+                msg or f"Expected to have have at least one row, but got 0 rows from: '{select_statement}'"
             )
 
     def check_if_not_exists_in_database(
@@ -87,7 +90,7 @@ class Assertion:
         Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
         than one connection open.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
         depending on the database client).
 
         Examples:
@@ -127,7 +130,7 @@ class Assertion:
         Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
         than one connection open.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
         depending on the database client).
 
         Examples:
@@ -165,7 +168,7 @@ class Assertion:
         Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
         than one connection open.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
         depending on the database client).
 
         Examples:
@@ -205,7 +208,7 @@ class Assertion:
         Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
         than one connection open.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
         depending on the database client).
 
         Examples:
@@ -245,7 +248,7 @@ class Assertion:
         Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
         than one connection open.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
         depending on the database client).
 
         Examples:
@@ -262,40 +265,50 @@ class Assertion:
                 msg or f"Expected less than {numRows} rows, but {num_rows} were returned from '{selectStatement}'"
             )
 
+    @renamed_args(mapping={"selectStatement": "select_statement", "sansTran": "no_transaction"})
     def check_row_count(
         self,
-        selectStatement: str,
+        select_statement: str,
         assertion_operator: AssertionOperator,
         expected_value: int,
         assertion_message: Optional[str] = None,
-        sansTran: bool = False,
+        no_transaction: bool = False,
         alias: Optional[str] = None,
         parameters: Optional[Tuple] = None,
         retry_timeout="0 seconds",
         retry_pause="0.5 seconds",
+        *,
+        selectStatement: Optional[str] = None,
+        sansTran: Optional[bool] = None,
     ):
         """
-        Check the number of rows returned from ``selectStatement`` using ``assertion_operator``
+        Check the number of rows returned from ``select_statement`` using ``assertion_operator``
         and ``expected_value``. See `Inline assertions` for more details.
 
-        Use optional ``assertion_message`` to override the default error message.
+        Use ``assertion_message`` to override the default error message.
 
-        Set optional input ``sansTran`` to _True_ to run command without an explicit transaction commit or rollback.
+        Set ``no_transaction`` to _True_ to run command without explicit transaction rollback in case of error.
+        See `Commit behavior` for details.
 
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
         depending on the database client).
 
         Use ``retry_timeout`` and ``retry_pause`` parameters to enable waiting for assertion to pass.
         See `Retry mechanism` for more details.
 
-        Examples:
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``selectStatement`` and ``sansTran`` are *deprecated*,
+        please use new parameters ``select_statement`` and ``no_transaction`` instead.
+
+        *The old parameters will be removed in future versions.*
+
+        === Examples ===
         | Check Row Count | SELECT id FROM person WHERE first_name = 'John' | *==* | 1 |
         | Check Row Count | SELECT id FROM person WHERE first_name = 'John' | *>=* | 2 | assertion_message=my error message |
         | Check Row Count | SELECT id FROM person WHERE first_name = 'John' | *inequal* | 3 | alias=my_alias |
-        | Check Row Count | SELECT id FROM person WHERE first_name = 'John' | *less than* | 4 | sansTran=True |
+        | Check Row Count | SELECT id FROM person WHERE first_name = 'John' | *less than* | 4 | no_transaction=True |
         | @{parameters} | Create List |  John |
         | Check Row Count | SELECT id FROM person WHERE first_name = %s | *equals* | 5 | parameters=${parameters} |
         """
@@ -303,7 +316,9 @@ class Assertion:
         time_counter = 0
         while not check_ok:
             try:
-                num_rows = self.row_count(selectStatement, sansTran, alias=alias, parameters=parameters)
+                num_rows = self.row_count(
+                    select_statement, no_transaction=no_transaction, alias=alias, parameters=parameters
+                )
                 verify_assertion(num_rows, assertion_operator, expected_value, "Wrong row count:", assertion_message)
                 check_ok = True
             except AssertionError as e:
@@ -313,22 +328,26 @@ class Assertion:
                 BuiltIn().sleep(retry_pause)
                 time_counter += timestr_to_secs(retry_pause)
 
+    @renamed_args(mapping={"selectStatement": "select_statement", "sansTran": "no_transaction"})
     def check_query_result(
         self,
-        selectStatement,
+        select_statement: str,
         assertion_operator: AssertionOperator,
         expected_value: Any,
         row=0,
         col=0,
         assertion_message: Optional[str] = None,
-        sansTran: bool = False,
+        no_transaction: bool = False,
         alias: Optional[str] = None,
         parameters: Optional[Tuple] = None,
         retry_timeout="0 seconds",
         retry_pause="0.5 seconds",
+        *,
+        selectStatement: Optional[str] = None,
+        sansTran: Optional[bool] = None,
     ):
         """
-        Check value in query result returned from ``selectStatement`` using ``assertion_operator`` and ``expected_value``.
+        Check value in query result returned from ``select_statement`` using ``assertion_operator`` and ``expected_value``.
         The value position in results can be adjusted using ``row`` and ``col`` parameters (0-based).
         See `Inline assertions` for more details.
 
@@ -338,25 +357,31 @@ class Assertion:
 
         Use optional ``assertion_message`` to override the default error message.
 
-        Set optional input ``sansTran`` to _True_ to run command without an explicit transaction commit or rollback.
+        Set ``no_transaction`` to _True_ to run command without explicit transaction rollback in case of error.
+        See `Commit behavior` for details.
 
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
         depending on the database client).
 
         Use ``retry_timeout`` and ``retry_pause`` parameters to enable waiting for assertion to pass.
         See `Retry mechanism` for more details.
 
-        Examples:
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``selectStatement`` and ``sansTran`` are *deprecated*,
+        please use new parameters ``select_statement`` and ``no_transaction`` instead.
+
+        *The old parameters will be removed in future versions.*
+
+        === Examples ===
         | Check Query Result | SELECT first_name FROM person | *contains* | Allan |
         | Check Query Result | SELECT first_name, last_name FROM person | *==* | Schneider | row=1 | col=1 |
         | Check Query Result | SELECT id FROM person WHERE first_name = 'John' | *==* | 2 | # Fails, if query returns an integer value |
         | Check Query Result | SELECT id FROM person WHERE first_name = 'John' | *==* | ${2} | # Works, if query returns an integer value |
         | Check Query Result | SELECT first_name FROM person | *equal* | Franz Allan | assertion_message=my error message |
         | Check Query Result | SELECT first_name FROM person | *inequal* | John | alias=my_alias |
-        | Check Query Result | SELECT first_name FROM person | *contains* | Allan | sansTran=True |
+        | Check Query Result | SELECT first_name FROM person | *contains* | Allan | no_transaction=True |
         | @{parameters} | Create List |  John |
         | Check Query Result | SELECT first_name FROM person | *contains* | Allan | parameters=${parameters} |
         """
@@ -364,7 +389,9 @@ class Assertion:
         time_counter = 0
         while not check_ok:
             try:
-                query_results = self.query(selectStatement, sansTran, alias=alias, parameters=parameters)
+                query_results = self.query(
+                    select_statement, no_transaction=no_transaction, alias=alias, parameters=parameters
+                )
                 row_count = len(query_results)
                 assert (
                     row < row_count
@@ -385,52 +412,65 @@ class Assertion:
                 BuiltIn().sleep(retry_pause)
                 time_counter += timestr_to_secs(retry_pause)
 
+    @renamed_args(mapping={"tableName": "table_name", "sansTran": "no_transaction"})
     def table_must_exist(
-        self, tableName: str, sansTran: bool = False, msg: Optional[str] = None, alias: Optional[str] = None
+        self,
+        table_name: str,
+        no_transaction: bool = False,
+        msg: Optional[str] = None,
+        alias: Optional[str] = None,
+        *,
+        tableName: Optional[str] = None,
+        sansTran: Optional[bool] = None,
     ):
         """
-        Check if the given table exists in the database.
+        Check if the table with `table_name` exists in the database.
 
-        Set optional input ``sansTran`` to True to run command without an
-        explicit transaction commit or rollback.
+        Use ``msg`` for custom error message.
 
-        The default error message can be overridden with the ``msg`` argument.
+        Set ``no_transaction`` to _True_ to run command without explicit transaction rollback in case of error.
+        See `Commit behavior` for details.
 
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        Examples:
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``tableName`` and ``sansTran`` are *deprecated*,
+        please use new parameters ``table_name`` and ``no_transaction`` instead.
+
+        *The old parameters will be removed in future versions.*
+
+        === Examples ===
         | Table Must Exist | person |
         | Table Must Exist | person | msg=my error message |
         | Table Must Exist | person | alias=my_alias |
-        | Table Must Exist | person | sansTran=True |
+        | Table Must Exist | person | no_transaction=True |
         """
         db_connection = self.connection_store.get_connection(alias)
         if db_connection.module_name in ["cx_Oracle", "oracledb"]:
             query = (
                 "SELECT * FROM all_objects WHERE object_type IN ('TABLE','VIEW') AND "
-                f"owner = SYS_CONTEXT('USERENV', 'SESSION_USER') AND object_name = UPPER('{tableName}')"
+                f"owner = SYS_CONTEXT('USERENV', 'SESSION_USER') AND object_name = UPPER('{table_name}')"
             )
-            table_exists = self.row_count(query, sansTran, alias=alias) > 0
+            table_exists = self.row_count(query, no_transaction=no_transaction, alias=alias) > 0
         elif db_connection.module_name in ["sqlite3"]:
-            query = f"SELECT name FROM sqlite_master WHERE type='table' AND name='{tableName}' COLLATE NOCASE"
-            table_exists = self.row_count(query, sansTran, alias=alias) > 0
+            query = f"SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}' COLLATE NOCASE"
+            table_exists = self.row_count(query, no_transaction=no_transaction, alias=alias) > 0
         elif db_connection.module_name in ["ibm_db", "ibm_db_dbi"]:
-            query = f"SELECT name FROM SYSIBM.SYSTABLES WHERE type='T' AND name=UPPER('{tableName}')"
-            table_exists = self.row_count(query, sansTran, alias=alias) > 0
+            query = f"SELECT name FROM SYSIBM.SYSTABLES WHERE type='T' AND name=UPPER('{table_name}')"
+            table_exists = self.row_count(query, no_transaction=no_transaction, alias=alias) > 0
         elif db_connection.module_name in ["teradata"]:
-            query = f"SELECT TableName FROM DBC.TablesV WHERE TableKind='T' AND TableName='{tableName}'"
-            table_exists = self.row_count(query, sansTran, alias=alias) > 0
+            query = f"SELECT TableName FROM DBC.TablesV WHERE TableKind='T' AND TableName='{table_name}'"
+            table_exists = self.row_count(query, no_transaction=no_transaction, alias=alias) > 0
         else:
             try:
-                query = f"SELECT * FROM information_schema.tables WHERE table_name='{tableName}'"
-                table_exists = self.row_count(query, sansTran, alias=alias) > 0
+                query = f"SELECT * FROM information_schema.tables WHERE table_name='{table_name}'"
+                table_exists = self.row_count(query, no_transaction=no_transaction, alias=alias) > 0
             except:
                 logger.info("Database doesn't support information schema, try using a simple SQL request")
                 try:
-                    query = f"SELECT 1 from {tableName} where 1=0"
-                    self.row_count(query, sansTran, alias=alias)
+                    query = f"SELECT 1 from {table_name} where 1=0"
+                    self.row_count(query, no_transaction=no_transaction, alias=alias)
                     table_exists = True
                 except:
                     table_exists = False
-        assert table_exists, msg or f"Table '{tableName}' does not exist in the db"
+        assert table_exists, msg or f"Table '{table_name}' does not exist in the db"
diff --git a/src/DatabaseLibrary/connection_manager.py b/src/DatabaseLibrary/connection_manager.py
index c0fe4ce..1969b32 100644
--- a/src/DatabaseLibrary/connection_manager.py
+++ b/src/DatabaseLibrary/connection_manager.py
@@ -20,6 +20,8 @@ from typing import Any, Dict, Optional
 
 from robot.api import logger
 
+from .params_decorator import renamed_args
+
 
 @dataclass
 class Connection:
@@ -156,58 +158,82 @@ class ConnectionManager:
             )
         return string_with_hidden_pass
 
+    @renamed_args(
+        mapping={
+            "dbapiModuleName": "db_module",
+            "dbName": "db_name",
+            "dbUsername": "db_user",
+            "dbPassword": "db_password",
+            "dbHost": "db_host",
+            "dbPort": "db_port",
+            "dbCharset": "db_charset",
+            "dbDriver": "odbc_driver",
+            "dbConfigFile": "config_file",
+            "driverMode": "oracle_driver_mode",
+        }
+    )
     def connect_to_database(
         self,
-        dbapiModuleName: Optional[str] = None,
-        dbName: Optional[str] = None,
-        dbUsername: Optional[str] = None,
-        dbPassword: Optional[str] = None,
-        dbHost: Optional[str] = None,
-        dbPort: Optional[int] = None,
-        dbCharset: Optional[str] = None,
-        dbDriver: Optional[str] = None,
-        dbConfigFile: Optional[str] = None,
-        driverMode: Optional[str] = None,
+        db_module: Optional[str] = None,
+        db_name: Optional[str] = None,
+        db_user: Optional[str] = None,
+        db_password: Optional[str] = None,
+        db_host: Optional[str] = None,
+        db_port: Optional[int] = None,
+        db_charset: Optional[str] = None,
+        odbc_driver: Optional[str] = None,
+        config_file: Optional[str] = None,
+        oracle_driver_mode: Optional[str] = None,
         alias: str = "default",
         **custom_connection_params,
     ):
         """
-        Creates a database connection using the DB API 2.0 module ``dbapiModuleName`` and the parameters provided.
-        Along with listed commonly used arguments (`dbName`, `dbHost` etc.)
+        Creates a database connection using the DB API 2.0 ``db_module`` and the parameters provided.
+        Along with listed commonly used arguments (`db_name`, `db_host` etc.)
         you can set any other DB module specific parameters as key/value pairs.
 
-        Use ``dbConfigFile`` to provide a path to configuration file with connection parameters
+        Use ``config_file`` to provide a path to configuration file with connection parameters
         to be used along with / instead of keyword arguments.
         If no specified, it defaults to `./resources/db.cfg`.
         See `Using configuration file` for more details.
 
-        All params are optional, although ``dbapiModuleName`` must be set - either as keyword argument or in config file.
-        If some of the listed keyword arguments (`dbName`, `dbHost` etc.) are not provided (i.e. left on default value `None`),
+        All params are optional, although ``db_module`` must be set - either as keyword argument or in config file.
+        If some of the listed keyword arguments (`db_name`, `db_host` etc.) are not provided (i.e. left on default value `None`),
         they are normally not passed to the Python DB module at all, except:
-        - _dbPort_ - commonly used port number for known databases is set as fallback
-        - _dbCharset_ - _UTF8_ is used as fallback for _pymysql_, _pymssql_ and _pyodbc_
-        - _driverMode_ - _thin_ is used as fallback for _oracledb_
+        - _db_port_ - commonly used port number for known databases is set as fallback
+        - _db_charset_ - _UTF8_ is used as fallback for _pymysql_, _pymssql_ and _pyodbc_
+        - _oracle_driver_mode_ - _thin_ is used as fallback for _oracledb_
 
         Other custom params from keyword arguments and config file are passed to the Python DB module as provided -
         normally as arguments for the _connect()_ function. However, when using *pyodbc*, the connection is established
         using a connection string - so all the custom params are added into it instead of function arguments.
 
-        Optional ``alias`` parameter can be used for creating multiple open connections, even for different databases.
-        If the same alias is given twice then previous connection will be overridden.
+        Set ``alias`` for `Handling multiple database connections`.
+        If the same alias is given twice, then previous connection will be overridden.
 
-        The ``driverMode`` is used to select the *oracledb* client mode.
+        The ``oracle_driver_mode`` is used to select the *oracledb* client mode.
         Allowed values are:
         - _thin_ (default if omitted)
         - _thick_
         - _thick,lib_dir=<PATH_TO_ORACLE_CLIENT>_
 
-        Examples
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``dbapiModuleName``, ``dbName``, ``dbUsername``,
+        ``dbPassword``, ``dbHost``, ``dbPort``, ``dbCharset``, ``dbDriver``,
+        ``dbConfigFile`` and ``driverMode`` are *deprecated*,
+        please use new parameters ``db_module``, ``db_name``, ``db_user``,
+        ``db_password``, ``db_host``, ``db_port``, ``db_charset``, ``odbc_driver``,
+        ``config_file`` and ``oracle_driver_mode`` instead.
+
+        *The old parameters will be removed in future versions.*
+
+        === Examples ===
         | Connect To Database | psycopg2 | my_db | user | pass | tiger.foobar.com | 5432 |
         | Connect To Database | psycopg2 | my_db | user | pass | tiger.foobar.com | 5432 | my_custom_param=value |
         | Connect To Database | psycopg2 | my_db | user | pass | tiger.foobar.com | 5432 | alias=my_alias |
-        | Connect To Database | dbConfigFile=my_db_params.cfg |
+        | Connect To Database | config_file=my_db_params.cfg |
         """
-        config = ConfigReader(dbConfigFile, alias)
+        config = ConfigReader(config_file, alias)
 
         def _build_connection_params(custom_params=True, **basic_params):
             con_params = basic_params.copy()
@@ -221,7 +247,7 @@ class ConnectionManager:
             return con_params
 
         def _log_all_connection_params(*, connection_object=None, connection_string=None, **connection_params):
-            connection_object = connection_object or dbapiModuleName
+            connection_object = connection_object or db_module
             msg = f"Connect to DB using : {connection_object}.connect("
             params_separator = ","
             if connection_string:
@@ -233,15 +259,22 @@ class ConnectionManager:
                     msg += f"'{param_value}'"
                 else:
                     msg += f"{param_value}"
-            if dbPassword:
-                msg = msg.replace(f"'{dbPassword}'", "***")
+            if db_password:
+                msg = msg.replace(f"'{db_password}'", "***")
             msg = self._hide_password_values(msg, params_separator)
             msg = msg.replace("connect(, ", "connect(")
             msg += ")"
             logger.info(msg)
 
-        def _arg_or_config(arg_value, param_name, mandatory=False):
+        def _arg_or_config(arg_value, param_name, *, old_param_name=None, mandatory=False):
             val_from_config = config.pop(param_name)
+
+            # support deprecated old param names
+            if val_from_config is None and old_param_name is not None:
+                val_from_config = config.pop(old_param_name)
+                if val_from_config is not None:
+                    logger.warn(f"Config file: argument '{old_param_name}' is deprecated, use '{param_name}' instead")
+
             if arg_value is not None:
                 final_value = arg_value
                 if val_from_config is not None:
@@ -259,18 +292,18 @@ class ConnectionManager:
             return final_value
 
         # mandatory parameter
-        dbapiModuleName = _arg_or_config(dbapiModuleName, "dbapiModuleName", mandatory=True)
+        db_module = _arg_or_config(db_module, "db_module", mandatory=True, old_param_name="dbapiModuleName")
         # optional named params - named because of custom module specific handling
-        dbName = _arg_or_config(dbName, "dbName")
-        dbUsername = _arg_or_config(dbUsername, "dbUsername")
-        dbPassword = _arg_or_config(dbPassword, "dbPassword")
-        dbHost = _arg_or_config(dbHost, "dbHost")
-        dbPort = _arg_or_config(dbPort, "dbPort")
-        if dbPort is not None:
-            dbPort = int(dbPort)
-        dbCharset = _arg_or_config(dbCharset, "dbCharset")
-        dbDriver = _arg_or_config(dbDriver, "dbDriver")
-        driverMode = _arg_or_config(driverMode, "driverMode")
+        db_name = _arg_or_config(db_name, "db_name", old_param_name="dbName")
+        db_user = _arg_or_config(db_user, "db_user", old_param_name="dbUsername")
+        db_password = _arg_or_config(db_password, "db_password", old_param_name="dbPassword")
+        db_host = _arg_or_config(db_host, "db_host", old_param_name="dbHost")
+        db_port = _arg_or_config(db_port, "db_port", old_param_name="dbPort")
+        if db_port is not None:
+            db_port = int(db_port)
+        db_charset = _arg_or_config(db_charset, "db_charset", old_param_name="dbCharset")
+        odbc_driver = _arg_or_config(odbc_driver, "odbc_driver", old_param_name="dbDriver")
+        oracle_driver_mode = _arg_or_config(oracle_driver_mode, "oracle_driver_mode", old_param_name="driverMode")
 
         for param_name, param_value in custom_connection_params.items():
             _arg_or_config(param_value, param_name)
@@ -278,61 +311,61 @@ class ConnectionManager:
         if other_config_file_params:
             logger.info(f"Other params from configuration file: {list(other_config_file_params.keys())}")
 
-        if dbapiModuleName == "excel" or dbapiModuleName == "excelrw":
+        if db_module == "excel" or db_module == "excelrw":
             db_api_module_name = "pyodbc"
         else:
-            db_api_module_name = dbapiModuleName
+            db_api_module_name = db_module
         db_api_2 = importlib.import_module(db_api_module_name)
 
-        if dbapiModuleName in ["MySQLdb", "pymysql"]:
-            dbPort = dbPort or 3306
-            dbCharset = dbCharset or "utf8mb4"
+        if db_module in ["MySQLdb", "pymysql"]:
+            db_port = db_port or 3306
+            db_charset = db_charset or "utf8mb4"
             con_params = _build_connection_params(
-                db=dbName, user=dbUsername, passwd=dbPassword, host=dbHost, port=dbPort, charset=dbCharset
+                db=db_name, user=db_user, passwd=db_password, host=db_host, port=db_port, charset=db_charset
             )
             _log_all_connection_params(**con_params)
             db_connection = db_api_2.connect(**con_params)
 
-        elif dbapiModuleName in ["pymssql"]:
-            dbPort = dbPort or 1433
-            dbCharset = dbCharset or "UTF-8"
+        elif db_module in ["pymssql"]:
+            db_port = db_port or 1433
+            db_charset = db_charset or "UTF-8"
             con_params = _build_connection_params(
-                database=dbName, user=dbUsername, password=dbPassword, host=dbHost, port=dbPort, charset=dbCharset
+                database=db_name, user=db_user, password=db_password, host=db_host, port=db_port, charset=db_charset
             )
             _log_all_connection_params(**con_params)
             db_connection = db_api_2.connect(**con_params)
 
-        elif dbapiModuleName in ["psycopg2"]:
-            dbPort = dbPort or 5432
+        elif db_module in ["psycopg2"]:
+            db_port = db_port or 5432
             con_params = _build_connection_params(
-                database=dbName, user=dbUsername, password=dbPassword, host=dbHost, port=dbPort
+                database=db_name, user=db_user, password=db_password, host=db_host, port=db_port
             )
             _log_all_connection_params(**con_params)
             db_connection = db_api_2.connect(**con_params)
 
-        elif dbapiModuleName in ["pyodbc", "pypyodbc"]:
-            dbPort = dbPort or 1433
-            dbCharset = dbCharset or "utf8mb4"
+        elif db_module in ["pyodbc", "pypyodbc"]:
+            db_port = db_port or 1433
+            db_charset = db_charset or "utf8mb4"
 
-            if dbDriver:
-                con_str = f"DRIVER={dbDriver};"
+            if odbc_driver:
+                con_str = f"DRIVER={odbc_driver};"
             else:
                 con_str = ""
                 logger.info("No ODBC driver specified")
                 logger.info(f"List of installed ODBC drivers: {db_api_2.drivers()}")
-            if dbName:
-                con_str += f"DATABASE={dbName};"
-            if dbUsername:
-                con_str += f"UID={dbUsername};"
-            if dbPassword:
-                con_str += f"PWD={dbPassword};"
-            if dbCharset:
-                con_str += f"charset={dbCharset};"
-            if dbHost and dbPort:
-                if dbDriver and "mysql" in dbDriver.lower():
-                    con_str += f"SERVER={dbHost}:{dbPort};"
+            if db_name:
+                con_str += f"DATABASE={db_name};"
+            if db_user:
+                con_str += f"UID={db_user};"
+            if db_password:
+                con_str += f"PWD={db_password};"
+            if db_charset:
+                con_str += f"charset={db_charset};"
+            if db_host and db_port:
+                if odbc_driver and "mysql" in odbc_driver.lower():
+                    con_str += f"SERVER={db_host}:{db_port};"
                 else:
-                    con_str += f"SERVER={dbHost},{dbPort};"
+                    con_str += f"SERVER={db_host},{db_port};"
 
             for param_name, param_value in custom_connection_params.items():
                 con_str += f"{param_name}={param_value};"
@@ -343,41 +376,41 @@ class ConnectionManager:
             _log_all_connection_params(connection_string=con_str)
             db_connection = db_api_2.connect(con_str)
 
-        elif dbapiModuleName in ["excel", "excelrw"]:
-            con_str = f"DRIVER={{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}};DBQ={dbName};"
+        elif db_module in ["excel", "excelrw"]:
+            con_str = f"DRIVER={{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}};DBQ={db_name};"
             con_str += "ReadOnly="
-            if dbapiModuleName == "excel":
+            if db_module == "excel":
                 con_str += "1;"
-            elif dbapiModuleName == "excelrw":
+            elif db_module == "excelrw":
                 con_str += "0;"
             con_str += 'Extended Properties="Excel 8.0;HDR=YES";)'
             logger.info(f"Connecting using : {db_api_module_name}.connect({con_str}, autocommit=True)")
             db_connection = db_api_2.connect(con_str, autocommit=True)
 
-        elif dbapiModuleName in ["ibm_db", "ibm_db_dbi"]:
-            dbPort = dbPort or 50000
+        elif db_module in ["ibm_db", "ibm_db_dbi"]:
+            db_port = db_port or 50000
             con_str = (
-                f"DATABASE={dbName};HOSTNAME={dbHost};PORT={dbPort};PROTOCOL=TCPIP;UID={dbUsername};PWD={dbPassword};"
+                f"DATABASE={db_name};HOSTNAME={db_host};PORT={db_port};PROTOCOL=TCPIP;UID={db_user};PWD={db_password};"
             )
             con_params = _build_connection_params(userID="", userPassword="")
             _log_all_connection_params(connection_string=con_str, **con_params)
             db_connection = db_api_2.connect(con_str, **con_params)
 
-        elif dbapiModuleName in ["cx_Oracle"]:
-            dbPort = dbPort or 1521
-            oracle_dsn = db_api_2.makedsn(host=dbHost, port=dbPort, service_name=dbName)
-            con_params = _build_connection_params(user=dbUsername, password=dbPassword, dsn=oracle_dsn)
+        elif db_module in ["cx_Oracle"]:
+            db_port = db_port or 1521
+            oracle_dsn = db_api_2.makedsn(host=db_host, port=db_port, service_name=db_name)
+            con_params = _build_connection_params(user=db_user, password=db_password, dsn=oracle_dsn)
             _log_all_connection_params(**con_params)
             db_connection = db_api_2.connect(**con_params)
             self.omit_trailing_semicolon = True
 
-        elif dbapiModuleName in ["oracledb"]:
-            dbPort = dbPort or 1521
-            driverMode = driverMode or "thin"
-            oracle_connection_params = db_api_2.ConnectParams(host=dbHost, port=dbPort, service_name=dbName)
-            if "thick" in driverMode.lower():
+        elif db_module in ["oracledb"]:
+            db_port = db_port or 1521
+            oracle_driver_mode = oracle_driver_mode or "thin"
+            oracle_connection_params = db_api_2.ConnectParams(host=db_host, port=db_port, service_name=db_name)
+            if "thick" in oracle_driver_mode.lower():
                 logger.info("Using thick Oracle client mode")
-                mode_param = driverMode.lower().split(",lib_dir=")
+                mode_param = oracle_driver_mode.lower().split(",lib_dir=")
                 if len(mode_param) == 2 and mode_param[0].lower() == "thick":
                     lib_dir = mode_param[1]
                     logger.info(f"Oracle client lib dir specified: {lib_dir}")
@@ -386,12 +419,12 @@ class ConnectionManager:
                     logger.info("No Oracle client lib dir specified, oracledb will search it in usual places")
                     db_api_2.init_oracle_client()
                 oracle_thin_mode = False
-            elif "thin" in driverMode.lower():
+            elif "thin" in oracle_driver_mode.lower():
                 oracle_thin_mode = True
                 logger.info("Using thin Oracle client mode")
             else:
-                raise ValueError(f"Invalid Oracle client mode provided: {driverMode}")
-            con_params = _build_connection_params(user=dbUsername, password=dbPassword, params=oracle_connection_params)
+                raise ValueError(f"Invalid Oracle client mode provided: {oracle_driver_mode}")
+            con_params = _build_connection_params(user=db_user, password=db_password, params=oracle_connection_params)
             _log_all_connection_params(**con_params)
             db_connection = db_api_2.connect(**con_params)
             assert db_connection.thin == oracle_thin_mode, (
@@ -400,88 +433,111 @@ class ConnectionManager:
             )
             self.omit_trailing_semicolon = True
 
-        elif dbapiModuleName in ["teradata"]:
-            dbPort = dbPort or 1025
+        elif db_module in ["teradata"]:
+            db_port = db_port or 1025
             teradata_udaExec = db_api_2.UdaExec(appName="RobotFramework", version="1.0", logConsole=False)
             con_params = _build_connection_params(
                 method="odbc",
-                system=dbHost,
-                database=dbName,
-                username=dbUsername,
-                password=dbPassword,
-                host=dbHost,
-                port=dbPort,
+                system=db_host,
+                database=db_name,
+                username=db_user,
+                password=db_password,
+                host=db_host,
+                port=db_port,
             )
-            _log_all_connection_params(connection_object=f"{dbapiModuleName}.UdaExec", **con_params)
+            _log_all_connection_params(connection_object=f"{db_module}.UdaExec", **con_params)
             db_connection = teradata_udaExec.connect(**con_params)
 
-        elif dbapiModuleName in ["ksycopg2"]:
-            dbPort = dbPort or 54321
+        elif db_module in ["ksycopg2"]:
+            db_port = db_port or 54321
             con_params = _build_connection_params(
-                database=dbName, user=dbUsername, password=dbPassword, host=dbHost, port=dbPort
+                database=db_name, user=db_user, password=db_password, host=db_host, port=db_port
             )
             _log_all_connection_params(**con_params)
             db_connection = db_api_2.connect(**con_params)
 
         else:
             con_params = _build_connection_params(
-                database=dbName, user=dbUsername, password=dbPassword, host=dbHost, port=dbPort
+                database=db_name, user=db_user, password=db_password, host=db_host, port=db_port
             )
             _log_all_connection_params(**con_params)
             db_connection = db_api_2.connect(**con_params)
 
         self.connection_store.register_connection(db_connection, db_api_module_name, alias)
 
+    @renamed_args(mapping={"dbapiModuleName": "db_module"})
     def connect_to_database_using_custom_params(
-        self, dbapiModuleName: Optional[str] = None, db_connect_string: str = "", alias: str = "default"
+        self,
+        db_module: Optional[str] = None,
+        db_connect_string: str = "",
+        alias: str = "default",
+        *,
+        dbapiModuleName: Optional[str] = None,
     ):
         """
         *DEPRECATED* Use new `Connect To Database` keyword with custom parameters instead.
         The deprecated keyword will be removed in future versions.
 
-        Loads the DB API 2.0 module given `dbapiModuleName` then uses it to
-        connect to the database using the map string `db_connect_string`
+        Loads the DB API 2.0 module given ``db_module`` then uses it to
+        connect to the database using the map string ``db_connect_string``
         (parsed as a list of named arguments).
 
         Use `connect_to_database_using_custom_connection_string` for passing
         all params in a single connection string or URI.
 
-        Example usage:
+        === Some parameters were renamed in version 2.0 ===
+        The old parameter ``dbapiModuleName`` is *deprecated*,
+        please use new parameter ``db_module`` instead.
+
+        *The old parameter will be removed in future versions.*
+
+        === Examples ===
         | Connect To Database Using Custom Params | psycopg2 | database='my_db_test', user='postgres', password='s3cr3t', host='tiger.foobar.com', port=5432 |
         | Connect To Database Using Custom Params | jaydebeapi | 'oracle.jdbc.driver.OracleDriver', 'my_db_test', 'system', 's3cr3t' |
         | Connect To Database Using Custom Params | oracledb | user="username", password="pass", dsn="localhost/orclpdb" |
         | Connect To Database Using Custom Params | sqlite3 | database="./my_database.db", isolation_level=None |
         """
-        db_api_2 = importlib.import_module(dbapiModuleName)
-        db_api_module_name = dbapiModuleName
+        db_api_2 = importlib.import_module(db_module)
+        db_api_module_name = db_module
         db_connect_string = f"db_api_2.connect({db_connect_string})"
         logger.info(
-            f"Executing : Connect To Database Using Custom Params : {dbapiModuleName}.connect("
+            f"Executing : Connect To Database Using Custom Params : {db_module}.connect("
             f"{self._hide_password_values(db_connect_string)})"
         )
 
         db_connection = eval(db_connect_string)
         self.connection_store.register_connection(db_connection, db_api_module_name, alias)
 
+    @renamed_args(mapping={"dbapiModuleName": "db_module"})
     def connect_to_database_using_custom_connection_string(
-        self, dbapiModuleName: Optional[str] = None, db_connect_string: str = "", alias: str = "default"
+        self,
+        db_module: Optional[str] = None,
+        db_connect_string: str = "",
+        alias: str = "default",
+        *,
+        dbapiModuleName: Optional[str] = None,
     ):
         """
-        Loads the DB API 2.0 module given `dbapiModuleName` then uses it to
-        connect to the database using the `db_connect_string`
+        Loads the DB API 2.0 module given ``db_module`` then uses it to
+        connect to the database using the ``db_connect_string``
         (parsed as single connection string or URI).
 
-        Use `connect_to_database_using_custom_params` for passing
-        connection params as named arguments.
+        Use `Connect To Database` for passing custom connection params as named arguments.
+
+        === Some parameters were renamed in version 2.0 ===
+        The old parameter ``dbapiModuleName`` is *deprecated*,
+        please use new parameter ``db_module`` instead.
+
+        *The old parameter will be removed in future versions.*
 
         Example usage:
         | Connect To Database Using Custom Connection String | psycopg2 | postgresql://postgres:s3cr3t@tiger.foobar.com:5432/my_db_test |
         | Connect To Database Using Custom Connection String | oracledb | username/pass@localhost:1521/orclpdb |
         """
-        db_api_2 = importlib.import_module(dbapiModuleName)
-        db_api_module_name = dbapiModuleName
+        db_api_2 = importlib.import_module(db_module)
+        db_api_module_name = db_module
         logger.info(
-            f"Executing : Connect To Database Using Custom Connection String : {dbapiModuleName}.connect("
+            f"Executing : Connect To Database Using Custom Connection String : {db_module}.connect("
             f"'{db_connect_string}')"
         )
         db_connection = db_api_2.connect(db_connect_string)
@@ -493,11 +549,13 @@ class ConnectionManager:
 
         By default, it's not an error if there was no open database connection -
         suitable for usage as a teardown.
-        However, you can enforce it using the `error_if_no_connection` parameter.
+        However, you can enforce it using the ``error_if_no_connection`` parameter.
 
-        Example usage:
-        | Disconnect From Database | # disconnects from current connection to the database |
-        | Disconnect From Database | alias=my_alias | # disconnects from current connection to the database |
+        Use ``alias`` to specify what connection should be closed if `Handling multiple database connections`.
+
+        === Examples ===
+        | Disconnect From Database |
+        | Disconnect From Database | alias=postgres |
         """
         db_connection = self.connection_store.pop_connection(alias)
         if db_connection is None:
@@ -512,33 +570,34 @@ class ConnectionManager:
         """
         Disconnects from all the databases -
         useful when testing with multiple database connections (aliases).
-
-        For example:
-        | Disconnect From All Databases | # Closes connections to all databases |
         """
         for db_connection in self.connection_store:
             db_connection.client.close()
         self.connection_store.clear()
 
-    def set_auto_commit(self, autoCommit: bool = True, alias: Optional[str] = None):
+    @renamed_args(mapping={"autoCommit": "auto_commit"})
+    def set_auto_commit(
+        self, auto_commit: bool = True, alias: Optional[str] = None, *, autoCommit: Optional[bool] = None
+    ):
         """
-        Turn the autocommit on the database connection ON or OFF.
+        Explicitly sets the autocommit behavior of the database connection to ``auto_commit``.
+        See `Commit behavior` for details.
 
-        The default behaviour on a newly created database connection is to automatically start a
-        transaction, which means that database actions that won't work if there is an active
-        transaction will fail. Common examples of these actions are creating or deleting a database
-        or database snapshot. By turning on auto commit on the database connection these actions
-        can be performed.
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        Example usage:
-        | # Default behaviour, sets auto commit to true
+        === Some parameters were renamed in version 2.0 ===
+        The old parameter ``autoCommit`` is *deprecated*,
+        please use new parameter ``auto_commit`` instead.
+
+        *The old parameter will be removed in future versions.*
+
+        === Examples ===
         | Set Auto Commit
-        | Set Auto Commit | alias=my_alias |
-        | # Explicitly set the desired state
-        | Set Auto Commit | False
+        | Set Auto Commit | False |
+        | Set Auto Commit | True  | alias=postgres |
         """
         db_connection = self.connection_store.get_connection(alias)
-        db_connection.client.autocommit = autoCommit
+        db_connection.client.autocommit = auto_commit
 
     def switch_database(self, alias: str):
         """
diff --git a/src/DatabaseLibrary/params_decorator.py b/src/DatabaseLibrary/params_decorator.py
new file mode 100644
index 0000000..b122b3f
--- /dev/null
+++ b/src/DatabaseLibrary/params_decorator.py
@@ -0,0 +1,33 @@
+"""
+These decorators are introduced for the transition from old argument naming / positioning to the new one.
+"""
+from functools import wraps
+
+from robot.api import logger
+
+
+def renamed_args(mapping):
+    """
+    Decorator to rename arguments and warn users about deprecated argument names.
+
+    :param mapping: Dictionary mapping old argument names to new argument names.
+    :return: The decorated function with remapped arguments.
+    """
+
+    def decorator(func):
+        @wraps(func)
+        def wrapper(*args, **kwargs):
+            # Check if any old argument names are used
+            for old_name, new_name in mapping.items():
+                if old_name in kwargs:
+                    # Issue a warning to the user
+                    logger.warn(f"Argument '{old_name}' is deprecated, use '{new_name}' instead")
+                    # Move the argument value to the new name
+                    logger.info(f"Replacing '{old_name}' with '{new_name}'")
+                    kwargs[new_name] = kwargs.pop(old_name)
+            # Call the original function with updated kwargs
+            return func(*args, **kwargs)
+
+        return wrapper
+
+    return decorator
diff --git a/src/DatabaseLibrary/query.py b/src/DatabaseLibrary/query.py
index 28239b9..29dd202 100644
--- a/src/DatabaseLibrary/query.py
+++ b/src/DatabaseLibrary/query.py
@@ -20,6 +20,8 @@ from typing import List, Optional, Tuple
 
 from robot.api import logger
 
+from .params_decorator import renamed_args
+
 
 class Query:
     """
@@ -30,104 +32,105 @@ class Query:
         self.LOG_QUERY_RESULTS = log_query_results
         self.LOG_QUERY_RESULTS_HEAD = log_query_results_head
 
+    @renamed_args(
+        mapping={"selectStatement": "select_statement", "sansTran": "no_transaction", "returnAsDict": "return_dict"}
+    )
     def query(
         self,
-        selectStatement: str,
-        sansTran: bool = False,
-        returnAsDict: bool = False,
+        select_statement: str,
+        no_transaction: bool = False,
+        return_dict: bool = False,
         alias: Optional[str] = None,
         parameters: Optional[Tuple] = None,
+        *,
+        selectStatement: Optional[str] = None,
+        sansTran: Optional[bool] = None,
+        returnAsDict: Optional[bool] = None,
     ):
         """
-        Runs a query with the ``selectStatement`` and returns the result as a list of rows.
+        Runs a query with the ``select_statement`` and returns the result as list of rows.
         The type of row values depends on the database module -
         usually they are tuples or tuple-like objects.
 
-        Set optional input ``returnAsDict`` to _True_ to explicitely convert the return values
-        into a list of dictionaries.
-
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
-
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
-        depending on the database client):
-        | @{parameters} | Create List |  person |
-        | Query | SELECT * FROM %s | parameters=${parameters} |
-
-        Use optional ``sansTran`` to run command without an explicit transaction commit or rollback:
-        | @{queryResults} | Query | SELECT * FROM person | True |
+        Set ``no_transaction`` to _True_ to run command without explicit transaction rollback in case of error.
+        See `Commit behavior` for details.
 
-        Tip: Unless you want to log all column values of the specified rows,
-        try specifying the column names in your select statements
-        as much as possible to prevent any unnecessary surprises with schema
-        changes and to easily see what your [] indexing is trying to retrieve
-        (i.e. instead of `"select * from my_table"`, try
-        `"select id, col_1, col_2 from my_table"`).
+        Set ``return_dict`` to _True_ to explicitly convert the return values into list of dictionaries.
 
-        For example, given we have a table `person` with the following data:
-        | id | first_name  | last_name |
-        |  1 | Franz Allan | See       |
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        When you do the following:
-        | @{queryResults} | Query | SELECT * FROM person |
-        | @{queryResults} | Query | SELECT * FROM person | alias=my_alias |
-        | Log Many | @{queryResults} |
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
+        depending on the database client).
 
-        You will get the following:
-        [1, 'Franz Allan', 'See']
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``selectStatement``, ``sansTran`` and ``returnAsDict`` are *deprecated*,
+        please use new parameters ``select_statement``, ``no_transaction`` and ``return_dict`` instead.
 
-        Also, you can do something like this:
-        | ${queryResults} | Query | SELECT first_name, last_name FROM person |
-        | Log | ${queryResults[0][1]}, ${queryResults[0][0]} |
+        *The old parameters will be removed in future versions.*
 
-        And get the following
-        See, Franz Allan
+        === Examples ===
+        | ${Results}=    | Query | select LAST_NAME from person |
+        | ${Results}=    | Query | select LAST_NAME from person | no_transaction=True |
+        | ${Results}=    | Query | select LAST_NAME from person | return_dict=True |
+        | ${Results}=    | Query | select LAST_NAME from person | alias=postgres |
+        | @{parameters} | Create List |  person |
+        | ${Results}=   | Query | SELECT * FROM %s | parameters=${parameters} |
         """
         db_connection = self.connection_store.get_connection(alias)
         cur = None
         try:
             cur = db_connection.client.cursor()
-            self._execute_sql(cur, selectStatement, parameters=parameters)
+            self._execute_sql(cur, select_statement, parameters=parameters)
             all_rows = cur.fetchall()
             col_names = [c[0] for c in cur.description]
             self._log_query_results(col_names, all_rows)
-            if returnAsDict:
+            if return_dict:
                 return [dict(zip(col_names, row)) for row in all_rows]
             return all_rows
         finally:
-            if cur and not sansTran:
+            if cur and not no_transaction:
                 db_connection.client.rollback()
 
+    @renamed_args(mapping={"selectStatement": "select_statement", "sansTran": "no_transaction"})
     def row_count(
         self,
-        selectStatement: str,
-        sansTran: bool = False,
+        select_statement: str,
+        no_transaction: bool = False,
         alias: Optional[str] = None,
         parameters: Optional[Tuple] = None,
+        *,
+        selectStatement: Optional[str] = None,
+        sansTran: Optional[bool] = None,
     ):
         """
-        Uses the input ``selectStatement`` to query the database and returns the number of rows from the query.
+        Runs a query with the ``select_statement`` and returns the number of rows in the result.
 
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
+        Set ``no_transaction`` to _True_ to run command without explicit transaction rollback in case of error.
+        See `Commit behavior` for details.
 
-        Use optional ``sansTran`` to run command without an explicit transaction commit or rollback:
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
-        depending on the database client):
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
+        depending on the database client).
 
-        Examples:
-        | ${rowCount} | Row Count | SELECT * FROM person |
-        | ${rowCount} | Row Count | SELECT * FROM person | sansTran=True |
-        | ${rowCount} | Row Count | SELECT * FROM person | alias=my_alias |
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``selectStatement`` and ``sansTran`` are *deprecated*,
+        please use new parameters ``select_statement`` and ``no_transaction`` instead.
+
+        *The old parameters will be removed in future versions.*
+
+        === Examples ===
+        | ${Rows}=    | Row Count | select LAST_NAME from person |
+        | ${Rows}=    | Row Count | select LAST_NAME from person | no_transaction=True |
+        | ${Rows}=    | Row Count | select LAST_NAME from person | alias=postgres |
         | @{parameters} | Create List |  person |
-        | ${rowCount} | Row Count | SELECT * FROM %s | parameters=${parameters} |
+        | ${Rows}=   | Row Count | SELECT * FROM %s | parameters=${parameters} |
         """
         db_connection = self.connection_store.get_connection(alias)
         cur = None
         try:
             cur = db_connection.client.cursor()
-            self._execute_sql(cur, selectStatement, parameters=parameters)
+            self._execute_sql(cur, select_statement, parameters=parameters)
             data = cur.fetchall()
             col_names = [c[0] for c in cur.description]
             if db_connection.module_name in ["sqlite3", "ibm_db", "ibm_db_dbi", "pyodbc"]:
@@ -138,155 +141,142 @@ class Query:
             self._log_query_results(col_names, data)
             return current_row_count
         finally:
-            if cur and not sansTran:
+            if cur and not no_transaction:
                 db_connection.client.rollback()
 
+    @renamed_args(mapping={"selectStatement": "select_statement", "sansTran": "no_transaction"})
     def description(
         self,
-        selectStatement: str,
-        sansTran: bool = False,
+        select_statement: str,
+        no_transaction: bool = False,
         alias: Optional[str] = None,
         parameters: Optional[Tuple] = None,
+        *,
+        selectStatement: Optional[str] = None,
+        sansTran: Optional[bool] = None,
     ):
         """
-        Uses the input ``selectStatement`` to query a table in the db which will be used to determine the description.
+        Runs a query with the ``select_statement`` to determine the table description.
 
-        For example, given we have a table `person` with the following data:
-        | id | first_name  | last_name |
-        |  1 | Franz Allan | See       |
+        Set ``no_transaction`` to _True_ to run command without explicit transaction rollback in case of error.
+        See `Commit behavior` for details.
 
-        When you do the following:
-        | @{queryResults} | Description | SELECT * FROM person |
-        | @{queryResults} | Description | SELECT * FROM person | alias=my_alias |
-        | Log Many | @{queryResults} |
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        You will get the following:
-        [Column(name='id', type_code=1043, display_size=None, internal_size=255, precision=None, scale=None, null_ok=None)]
-        [Column(name='first_name', type_code=1043, display_size=None, internal_size=255, precision=None, scale=None, null_ok=None)]
-        [Column(name='last_name', type_code=1043, display_size=None, internal_size=255, precision=None, scale=None, null_ok=None)]
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
+        depending on the database client).
 
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``selectStatement`` and ``sansTran`` are *deprecated*,
+        please use new parameters ``select_statement`` and ``no_transaction`` instead.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
-        depending on the database client):
-        | @{parameters} | Create List |  person |
-        | ${desc} | Description | SELECT * FROM %s | parameters=${parameters} |
+        *The old parameters will be removed in future versions.*
 
-        Using optional `sansTran` to run command without an explicit transaction commit or rollback:
-        | @{queryResults} | Description | SELECT * FROM person | True |
+        === Examples ===
+        | ${Person table description}=  | Description | select LAST_NAME from person |
+        | ${Person table description}=  | Description | select LAST_NAME from person | no_transaction=True |
+        | ${Person table description}=  | Description | select LAST_NAME from person | alias=postgres |
+        | @{parameters} | Create List |  person |
+        | ${Person table description}=   | Description | SELECT * FROM %s | parameters=${parameters} |
         """
         db_connection = self.connection_store.get_connection(alias)
         cur = None
         try:
             cur = db_connection.client.cursor()
-            self._execute_sql(cur, selectStatement, parameters=parameters)
+            self._execute_sql(cur, select_statement, parameters=parameters)
             description = list(cur.description)
             if sys.version_info[0] < 3:
                 for row in range(0, len(description)):
                     description[row] = (description[row][0].encode("utf-8"),) + description[row][1:]
             return description
         finally:
-            if cur and not sansTran:
+            if cur and not no_transaction:
                 db_connection.client.rollback()
 
-    def delete_all_rows_from_table(self, tableName: str, sansTran: bool = False, alias: Optional[str] = None):
+    @renamed_args(mapping={"tableName": "table_name", "sansTran": "no_transaction"})
+    def delete_all_rows_from_table(
+        self,
+        table_name: str,
+        no_transaction: bool = False,
+        alias: Optional[str] = None,
+        *,
+        tableName: Optional[str] = None,
+        sansTran: Optional[bool] = None,
+    ):
         """
-        Delete all the rows within a given table.
+        Deletes all rows from table with ``table_name``.
 
-        Use optional `sansTran` to run command without an explicit transaction commit or rollback.
+        Set ``no_transaction`` to _True_ to run command without explicit transaction commit
+        or rollback in case of error.
+        See `Commit behavior` for details.
 
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        Examples:
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``tableName`` and ``sansTran`` are *deprecated*,
+        please use new parameters ``table_name`` and ``no_transaction`` instead.
+
+        *The old parameters will be removed in future versions.*
+
+        === Examples ===
         | Delete All Rows From Table | person |
+        | Delete All Rows From Table | person | no_transaction=True |
         | Delete All Rows From Table | person | alias=my_alias |
-        | Delete All Rows From Table | person | sansTran=True |
         """
         db_connection = self.connection_store.get_connection(alias)
         cur = None
-        query = f"DELETE FROM {tableName}"
+        query = f"DELETE FROM {table_name}"
         try:
             cur = db_connection.client.cursor()
             result = self._execute_sql(cur, query)
             if result is not None:
-                if not sansTran:
+                if not no_transaction:
                     db_connection.client.commit()
                 return result
-            if not sansTran:
+            if not no_transaction:
                 db_connection.client.commit()
         finally:
-            if cur and not sansTran:
+            if cur and not no_transaction:
                 db_connection.client.rollback()
 
+    @renamed_args(mapping={"sqlScriptFileName": "script_path", "sansTran": "no_transaction"})
     def execute_sql_script(
-        self, sqlScriptFileName: str, sansTran: bool = False, alias: Optional[str] = None, split: bool = True
+        self,
+        script_path: str,
+        no_transaction: bool = False,
+        alias: Optional[str] = None,
+        split: bool = True,
+        *,
+        sqlScriptFileName: Optional[str] = None,
+        sansTran: Optional[bool] = None,
     ):
         """
-        Executes the content of the `sqlScriptFileName` as SQL commands. Useful for setting the database to a known
-        state before running your tests, or clearing out your test data after running each a test.
+        Executes the content of the SQL script file loaded from `script_path` as SQL commands.
 
         SQL commands are expected to be delimited by a semicolon (';') - they will be split and executed separately.
-        You can disable this behaviour setting the parameter `split` to _False_ -
-        in this case the entire script content will be passed to the database module for execution.
-
-        Sample usage :
-        | Execute Sql Script | ${EXECDIR}${/}resources${/}DDL-setup.sql |
-        | Execute Sql Script | ${EXECDIR}${/}resources${/}DML-setup.sql |
-        | Execute Sql Script | ${EXECDIR}${/}resources${/}DDL-setup.sql | alias=my_alias |
-        | #interesting stuff here |
-        | Execute Sql Script | ${EXECDIR}${/}resources${/}DML-teardown.sql |
-        | Execute Sql Script | ${EXECDIR}${/}resources${/}DDL-teardown.sql |
-
-
-        For example:
-        DELETE FROM person_employee_table;
-        DELETE FROM person_table;
-        DELETE FROM employee_table;
-
-        Also, the last SQL command can optionally omit its trailing semi-colon.
-
-        For example:
-        DELETE FROM person_employee_table;
-        DELETE FROM person_table;
-        DELETE FROM employee_table
-
-        Given this, that means you can create spread your SQL commands in several
-        lines.
-
-        For example:
-        DELETE
-          FROM person_employee_table;
-        DELETE
-          FROM person_table;
-        DELETE
-          FROM employee_table
-
-        However, lines that starts with a number sign (`#`) or a double dash ("--")
-        are treated as a commented line. Thus, none of the contents of that line will be executed.
-
-
-        For example:
-        # Delete the bridging table first...
-        DELETE
-          FROM person_employee_table;
-          # ...and then the bridged tables.
-        DELETE
-          FROM person_table;
-        DELETE
-          FROM employee_table
-
-        The slash signs ("/") are always ignored and have no impact on execution order.
-
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
-
-        Use optional `sansTran` to run command without an explicit transaction commit or rollback:
-        | Execute Sql Script | ${EXECDIR}${/}resources${/}DDL-setup.sql | True |
+        Set ``split`` to _False_ to disable this behavior  - in this case the entire script content
+        will be passed to the database module for execution as a single command.
+
+        Set ``no_transaction`` to _True_ to run command without explicit transaction commit
+        or rollback in case of error.
+        See `Commit behavior` for details.
+
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
+
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``sqlScriptFileName`` and ``sansTran`` are *deprecated*,
+        please use new parameters ``script_path`` and ``no_transaction`` instead.
+
+        *The old parameters will be removed in future versions.*
+
+        === Examples ===
+        | Execute SQL Script | insert_data_in_person_table.sql |
+        | Execute SQL Script | insert_data_in_person_table.sql | no_transaction=True |
+        | Execute SQL Script | insert_data_in_person_table.sql | alias=postgres |
+        | Execute SQL Script | insert_data_in_person_table.sql | split=False |
         """
         db_connection = self.connection_store.get_connection(alias)
-        with open(sqlScriptFileName, encoding="UTF-8") as sql_file:
+        with open(script_path, encoding="UTF-8") as sql_file:
             cur = None
             try:
                 cur = db_connection.client.cursor()
@@ -358,83 +348,113 @@ class Query:
                         line_ends_with_proc_end = re.compile(r"(\s|;)" + proc_end_pattern.pattern + "$")
                         omit_semicolon = not line_ends_with_proc_end.search(statement.lower())
                         self._execute_sql(cur, statement, omit_semicolon)
-                if not sansTran:
+                if not no_transaction:
                     db_connection.client.commit()
             finally:
-                if cur and not sansTran:
+                if cur and not no_transaction:
                     db_connection.client.rollback()
 
+    @renamed_args(
+        mapping={
+            "sqlString": "sql_string",
+            "sansTran": "no_transaction",
+            "omitTrailingSemicolon": "omit_trailing_semicolon",
+        }
+    )
     def execute_sql_string(
         self,
-        sqlString: str,
-        sansTran: bool = False,
+        sql_string: str,
+        no_transaction: bool = False,
         alias: Optional[str] = None,
         parameters: Optional[Tuple] = None,
+        omit_trailing_semicolon: Optional[bool] = None,
+        *,
+        sqlString: Optional[str] = None,
+        sansTran: Optional[bool] = None,
         omitTrailingSemicolon: Optional[bool] = None,
     ):
         """
-        Executes the ``sqlString`` as a single SQL command.
+        Executes the ``sql_string`` as a single SQL command.
+
+        Set ``no_transaction`` to _True_ to run command without explicit transaction commit
+        or rollback in case of error.
+        See `Commit behavior` for details.
 
-        Use optional ``sansTran`` to run command without an explicit transaction commit or rollback.
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
 
-        Use optional ``omitTrailingSemicolon`` parameter for explicit instruction,
+        Use ``parameters`` for query variable substitution (variable substitution syntax may be different
+        depending on the database client).
+
+        Use ``omit_trailing_semicolon`` for explicit instruction,
         if the trailing semicolon (;) at the SQL string end should be removed or not:
         - Some database modules (e.g. Oracle) throw an exception, if you leave a semicolon at the string end
-        - However, there are exceptional cases, when you need it even for Oracle - e.g. at the end of a PL/SQL block.
-        - If not specified, it's decided based on the current database module in use. For Oracle, the semicolon is removed by default.
+        - However, there are exceptional cases, when you need it even for Oracle - e.g. at the end of a PL/SQL block
+        - If not explicitly specified, it's decided based on the current database module in use. For Oracle, the semicolon is removed by default.
 
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``sqlString``, ``sansTran`` and ``omitTrailingSemicolon`` are *deprecated*,
+        please use new parameters ``sql_string``, ``no_transaction`` and ``omit_trailing_semicolon`` instead.
 
-        Use optional ``parameters`` for query variable substitution (variable substitution syntax may be different
-        depending on the database client).
+        *The old parameters will be removed in future versions.*
 
-        For example:
+        === Examples ===
         | Execute Sql String | DELETE FROM person_employee_table; DELETE FROM person_table |
+        | Execute Sql String | DELETE FROM person_employee_table; DELETE FROM person_table | no_transaction=True |
         | Execute Sql String | DELETE FROM person_employee_table; DELETE FROM person_table | alias=my_alias |
-        | Execute Sql String | DELETE FROM person_employee_table; DELETE FROM person_table | sansTran=True |
-        | Execute Sql String | CREATE PROCEDURE proc AS BEGIN DBMS_OUTPUT.PUT_LINE('Hello!'); END; | omitTrailingSemicolon=False |
+        | Execute Sql String | CREATE PROCEDURE proc AS BEGIN DBMS_OUTPUT.PUT_LINE('Hello!'); END; | omit_trailing_semicolon=False |
         | @{parameters} | Create List |  person_employee_table |
-        | Execute Sql String | SELECT * FROM %s | parameters=${parameters} |
+        | Execute Sql String | DELETE FROM %s | parameters=${parameters} |
         """
         db_connection = self.connection_store.get_connection(alias)
         cur = None
         try:
             cur = db_connection.client.cursor()
-            self._execute_sql(cur, sqlString, omit_trailing_semicolon=omitTrailingSemicolon, parameters=parameters)
-            if not sansTran:
+            self._execute_sql(cur, sql_string, omit_trailing_semicolon=omit_trailing_semicolon, parameters=parameters)
+            if not no_transaction:
                 db_connection.client.commit()
         finally:
-            if cur and not sansTran:
+            if cur and not no_transaction:
                 db_connection.client.rollback()
 
+    @renamed_args(mapping={"spName": "procedure_name", "spParams": "procedure_params", "sansTran": "no_transaction"})
     def call_stored_procedure(
         self,
-        spName: str,
-        spParams: Optional[List] = None,
-        sansTran: bool = False,
+        procedure_name: str,
+        procedure_params: Optional[List] = None,
+        no_transaction: bool = False,
         alias: Optional[str] = None,
         additional_output_params: Optional[List] = None,
+        *,
+        spName: Optional[str] = None,
+        spParams: Optional[List] = None,
+        sansTran: Optional[bool] = None,
     ):
         """
-        Calls a stored procedure `spName` with the `spParams` - a *list* of parameters the procedure requires.
+        Calls a stored procedure `procedure_name` with the `procedure_params` - a *list* of parameters the procedure requires.
         *Returns two lists* - the _parameter values_ and the _result sets_.
 
         Use the special *CURSOR* value for OUT params, which should receive result sets - relevant only for some databases (e.g. Oracle or PostgreSQL).
 
-        Use the `additional_output_params` list for OUT params of a procedure in MSSQL.
+        Set ``no_transaction`` to _True_ to run command without explicit transaction commit
+        or rollback in case of error.
+        See `Commit behavior` for details.
+
+        Use ``alias`` to specify what connection should be used if `Handling multiple database connections`.
+
+        Use the ``additional_output_params`` list for OUT params of a procedure in MSSQL.
 
-        Use optional ``alias`` parameter to specify what connection should be used for the query if you have more
-        than one connection open.
+        === Some parameters were renamed in version 2.0 ===
+        The old parameters ``spName``, ``spParams`` and ``sansTran`` are *deprecated*, please use
+        new parameters ``procedure_name``, ``procedure_params`` and ``no_transaction`` instead.
 
-        Use optional `sansTran` to run command without an explicit transaction commit or rollback.
+        *The old parameters will be removed in future versions.*
 
         = Handling parameters and result sets =
         Handling the input and output parameters and the result sets is very different
         depending on the database itself and on the Python database driver - i.e. how it implements the `cursor.callproc()` function.
 
         == Common case (e.g. MySQL) ==
-        Generally a procedure call requires all parameter values (IN and OUT) put together in a list - `spParams`.
+        Generally a procedure call requires all parameter values (IN and OUT) put together in a list - `procedure_params`.
 
         Calling the procedure returns *two lists*:
         - *Param values* - the copy of procedure parameters (modified, if the procedure changes the OUT params). The list is empty, if procedures receives no params.
@@ -566,7 +586,7 @@ class Query:
         |     END
         | END;
 
-        Calling the procedure in Robot Framework requires putting the IN parameters as usual in the `spParams` argument,
+        Calling the procedure in Robot Framework requires putting the IN parameters as usual in the `procedure_params` argument,
         but the sample values of OUT parameters must be put in the argument `additional_output_params`.
 
         | @{params}=    Create List    give me 1
@@ -599,8 +619,8 @@ class Query:
         This case is *not fully supported* by the library - the OUT params won't be fetched.
         """
         db_connection = self.connection_store.get_connection(alias)
-        if spParams is None:
-            spParams = []
+        if procedure_params is None:
+            procedure_params = []
         if additional_output_params is None:
             additional_output_params = []
         cur = None
@@ -614,7 +634,7 @@ class Query:
             result_sets = []
 
             if db_connection.module_name == "pymysql":
-                cur.callproc(spName, spParams)
+                cur.callproc(procedure_name, procedure_params)
 
                 # first proceed the result sets if available
                 result_sets_available = True
@@ -626,35 +646,35 @@ class Query:
                 result_sets.pop()
 
                 # now go on with single values - modified input params
-                for i in range(0, len(spParams)):
-                    cur.execute(f"select @_{spName}_{i}")
+                for i in range(0, len(procedure_params)):
+                    cur.execute(f"select @_{procedure_name}_{i}")
                     param_values.append(cur.fetchall()[0][0])
 
             elif db_connection.module_name in ["oracledb", "cx_Oracle"]:
                 # check if "CURSOR" params were passed - they will be replaced
                 # with cursor variables for storing the result sets
-                params_substituted = spParams.copy()
+                params_substituted = procedure_params.copy()
                 cursor_params = []
-                for i in range(0, len(spParams)):
-                    if spParams[i] == "CURSOR":
+                for i in range(0, len(procedure_params)):
+                    if procedure_params[i] == "CURSOR":
                         cursor_param = db_connection.client.cursor()
                         params_substituted[i] = cursor_param
                         cursor_params.append(cursor_param)
-                param_values = cur.callproc(spName, params_substituted)
+                param_values = cur.callproc(procedure_name, params_substituted)
                 for result_set in cursor_params:
                     result_sets.append(list(result_set))
 
             elif db_connection.module_name in ["psycopg2", "psycopg3"]:
                 # check if "CURSOR" params were passed - they will be replaced
                 # with cursor variables for storing the result sets
-                params_substituted = spParams.copy()
+                params_substituted = procedure_params.copy()
                 cursor_params = []
-                for i in range(0, len(spParams)):
-                    if spParams[i] == "CURSOR":
+                for i in range(0, len(procedure_params)):
+                    if procedure_params[i] == "CURSOR":
                         cursor_param = f"CURSOR_{i}"
                         params_substituted[i] = cursor_param
                         cursor_params.append(cursor_param)
-                param_values = cur.callproc(spName, params_substituted)
+                param_values = cur.callproc(procedure_name, params_substituted)
                 if cursor_params:
                     for cursor_param in cursor_params:
                         cur.execute(f'FETCH ALL IN "{cursor_param}"')
@@ -673,9 +693,9 @@ class Query:
             else:
                 if db_connection.module_name == "pymssql":
                     mssql = importlib.import_module("pymssql")
-                    spParams = spParams.copy()
+                    procedure_params = procedure_params.copy()
                     for param in additional_output_params:
-                        spParams.append(mssql.output(type(param), param))
+                        procedure_params.append(mssql.output(type(param), param))
 
                 else:
                     logger.info(
@@ -683,7 +703,7 @@ class Query:
                         "No special handling is known, so trying the common way with return params and result sets."
                     )
 
-                param_values = cur.callproc(spName, spParams)
+                param_values = cur.callproc(procedure_name, procedure_params)
                 logger.info("Reading the procedure result sets..")
                 result_sets_available = True
                 while result_sets_available:
@@ -697,12 +717,12 @@ class Query:
                     else:
                         result_sets_available = False
 
-            if not sansTran:
+            if not no_transaction:
                 db_connection.client.commit()
 
             return param_values, result_sets
         finally:
-            if cur and not sansTran:
+            if cur and not no_transaction:
                 db_connection.client.rollback()
 
     def set_logging_query_results(self, enabled: Optional[bool] = None, log_head: Optional[int] = None):


Test patch:
diff --git a/test/resources/config_files/oracledb/custom_param_password.cfg b/test/resources/config_files/oracledb/custom_param_password.cfg
index 4835811..d6d93b9 100644
--- a/test/resources/config_files/oracledb/custom_param_password.cfg
+++ b/test/resources/config_files/oracledb/custom_param_password.cfg
@@ -1,6 +1,6 @@
 [default]
-dbapiModuleName=oracledb
-dbName=db
+db_module=oracledb
+db_name=db
 password=pass
-dbHost=127.0.0.1
-dbPort=1521
\ No newline at end of file
+db_host=127.0.0.1
+db_port=1521
\ No newline at end of file
diff --git a/test/resources/config_files/oracledb/invalid_custom_params.cfg b/test/resources/config_files/oracledb/invalid_custom_params.cfg
index 3f2a48b..1214b8b 100644
--- a/test/resources/config_files/oracledb/invalid_custom_params.cfg
+++ b/test/resources/config_files/oracledb/invalid_custom_params.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=oracledb
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=1521
+db_module=oracledb
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=1521
 blah=blah
\ No newline at end of file
diff --git a/test/resources/config_files/oracledb/old_param_names.cfg b/test/resources/config_files/oracledb/old_param_names.cfg
new file mode 100644
index 0000000..2d81cd4
--- /dev/null
+++ b/test/resources/config_files/oracledb/old_param_names.cfg
@@ -0,0 +1,8 @@
+[default]
+dbapiModuleName=oracledb
+dbName=db
+dbUsername=db_user
+dbPassword=pass
+dbHost=127.0.0.1
+dbPort=1521
+driverMode=thin
\ No newline at end of file
diff --git a/test/resources/config_files/oracledb/simple_default_alias.cfg b/test/resources/config_files/oracledb/simple_default_alias.cfg
index 2d81cd4..fe487e8 100644
--- a/test/resources/config_files/oracledb/simple_default_alias.cfg
+++ b/test/resources/config_files/oracledb/simple_default_alias.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=oracledb
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=1521
-driverMode=thin
\ No newline at end of file
+db_module=oracledb
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=1521
+oracle_driver_mode=thin
\ No newline at end of file
diff --git a/test/resources/config_files/oracledb/some_basic_params_missing.cfg b/test/resources/config_files/oracledb/some_basic_params_missing.cfg
index 83454d0..7e845af 100644
--- a/test/resources/config_files/oracledb/some_basic_params_missing.cfg
+++ b/test/resources/config_files/oracledb/some_basic_params_missing.cfg
@@ -1,3 +1,3 @@
 [default]
-dbapiModuleName=oracledb
-dbName=db
\ No newline at end of file
+db_module=oracledb
+db_name=db
\ No newline at end of file
diff --git a/test/resources/config_files/oracledb/thick_mode.cfg b/test/resources/config_files/oracledb/thick_mode.cfg
index 7878033..bd1a487 100644
--- a/test/resources/config_files/oracledb/thick_mode.cfg
+++ b/test/resources/config_files/oracledb/thick_mode.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=oracledb
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=1521
-driverMode=thick
\ No newline at end of file
+db_module=oracledb
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=1521
+oracle_driver_mode=thick
\ No newline at end of file
diff --git a/test/resources/config_files/oracledb/valid_custom_params.cfg b/test/resources/config_files/oracledb/valid_custom_params.cfg
index 6538367..df3bffd 100644
--- a/test/resources/config_files/oracledb/valid_custom_params.cfg
+++ b/test/resources/config_files/oracledb/valid_custom_params.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=oracledb
-dbName=db
+db_module=oracledb
+db_name=db
 user=db_user
 password=pass
-dbHost=127.0.0.1
-dbPort=1521
\ No newline at end of file
+db_host=127.0.0.1
+db_port=1521
\ No newline at end of file
diff --git a/test/resources/config_files/oracledb/wrong_password.cfg b/test/resources/config_files/oracledb/wrong_password.cfg
index 2b6b05d..87691ac 100644
--- a/test/resources/config_files/oracledb/wrong_password.cfg
+++ b/test/resources/config_files/oracledb/wrong_password.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=oracledb
-dbName=db
-dbUsername=db_user
-dbPassword=wrong
-dbHost=127.0.0.1
-dbPort=1521
\ No newline at end of file
+db_module=oracledb
+db_name=db
+db_user=db_user
+db_password=wrong
+db_host=127.0.0.1
+db_port=1521
\ No newline at end of file
diff --git a/test/resources/config_files/psycopg2/custom_param_password.cfg b/test/resources/config_files/psycopg2/custom_param_password.cfg
index 0b0fa77..1ae5cb9 100644
--- a/test/resources/config_files/psycopg2/custom_param_password.cfg
+++ b/test/resources/config_files/psycopg2/custom_param_password.cfg
@@ -1,6 +1,6 @@
 [default]
-dbapiModuleName=psycopg2
-dbName=db
+db_module=psycopg2
+db_name=db
 password=pass
-dbHost=127.0.0.1
-dbPort=5432
\ No newline at end of file
+db_host=127.0.0.1
+db_port=5432
\ No newline at end of file
diff --git a/test/resources/config_files/psycopg2/invalid_custom_params.cfg b/test/resources/config_files/psycopg2/invalid_custom_params.cfg
index 343eeb4..1496965 100644
--- a/test/resources/config_files/psycopg2/invalid_custom_params.cfg
+++ b/test/resources/config_files/psycopg2/invalid_custom_params.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=psycopg2
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=5432
+db_module=psycopg2
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=5432
 blah=blah
\ No newline at end of file
diff --git a/test/resources/config_files/psycopg2/old_param_names.cfg b/test/resources/config_files/psycopg2/old_param_names.cfg
new file mode 100644
index 0000000..d9faef7
--- /dev/null
+++ b/test/resources/config_files/psycopg2/old_param_names.cfg
@@ -0,0 +1,7 @@
+[default]
+dbapiModuleName=psycopg2
+dbName=db
+dbUsername=db_user
+dbPassword=pass
+dbHost=127.0.0.1
+dbPort=5432
\ No newline at end of file
diff --git a/test/resources/config_files/psycopg2/simple_default_alias.cfg b/test/resources/config_files/psycopg2/simple_default_alias.cfg
index d9faef7..a80ef74 100644
--- a/test/resources/config_files/psycopg2/simple_default_alias.cfg
+++ b/test/resources/config_files/psycopg2/simple_default_alias.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=psycopg2
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=5432
\ No newline at end of file
+db_module=psycopg2
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=5432
\ No newline at end of file
diff --git a/test/resources/config_files/psycopg2/some_basic_params_missing.cfg b/test/resources/config_files/psycopg2/some_basic_params_missing.cfg
index 7d82bff..49d1cde 100644
--- a/test/resources/config_files/psycopg2/some_basic_params_missing.cfg
+++ b/test/resources/config_files/psycopg2/some_basic_params_missing.cfg
@@ -1,3 +1,3 @@
 [default]
-dbapiModuleName=psycopg2
-dbName=db
\ No newline at end of file
+db_module=psycopg2
+db_name=db
\ No newline at end of file
diff --git a/test/resources/config_files/psycopg2/valid_custom_params.cfg b/test/resources/config_files/psycopg2/valid_custom_params.cfg
index c143601..fb15ffa 100644
--- a/test/resources/config_files/psycopg2/valid_custom_params.cfg
+++ b/test/resources/config_files/psycopg2/valid_custom_params.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=psycopg2
-dbName=db
+db_module=psycopg2
+db_name=db
 user=db_user
 password=pass
-dbHost=127.0.0.1
-dbPort=5432
\ No newline at end of file
+db_host=127.0.0.1
+db_port=5432
\ No newline at end of file
diff --git a/test/resources/config_files/psycopg2/wrong_password.cfg b/test/resources/config_files/psycopg2/wrong_password.cfg
index 074080f..9e97614 100644
--- a/test/resources/config_files/psycopg2/wrong_password.cfg
+++ b/test/resources/config_files/psycopg2/wrong_password.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=psycopg2
-dbName=db
-dbUsername=db_user
-dbPassword=wrong
-dbHost=127.0.0.1
-dbPort=5432
\ No newline at end of file
+db_module=psycopg2
+db_name=db
+db_user=db_user
+db_password=wrong
+db_host=127.0.0.1
+db_port=5432
\ No newline at end of file
diff --git a/test/resources/config_files/pymssql/charset_invalid.cfg b/test/resources/config_files/pymssql/charset_invalid.cfg
index c8ed37c..dab6951 100644
--- a/test/resources/config_files/pymssql/charset_invalid.cfg
+++ b/test/resources/config_files/pymssql/charset_invalid.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=pymssql
-dbName=db
+db_module=pymssql
+db_name=db
 user=SA
 password=MyPass1234!
-dbHost=127.0.0.1
-dbPort=1433
-dbCharset=wrong
\ No newline at end of file
+db_host=127.0.0.1
+db_port=1433
+db_charset=wrong
\ No newline at end of file
diff --git a/test/resources/config_files/pymssql/custom_param_password.cfg b/test/resources/config_files/pymssql/custom_param_password.cfg
index e11f91b..ff03d15 100644
--- a/test/resources/config_files/pymssql/custom_param_password.cfg
+++ b/test/resources/config_files/pymssql/custom_param_password.cfg
@@ -1,6 +1,6 @@
 [default]
-dbapiModuleName=pymssql
-dbName=db
+db_module=pymssql
+db_name=db
 password=MyPass1234!
-dbHost=127.0.0.1
-dbPort=1433
\ No newline at end of file
+db_host=127.0.0.1
+db_port=1433
\ No newline at end of file
diff --git a/test/resources/config_files/pymssql/invalid_custom_params.cfg b/test/resources/config_files/pymssql/invalid_custom_params.cfg
index 7935942..1c6c801 100644
--- a/test/resources/config_files/pymssql/invalid_custom_params.cfg
+++ b/test/resources/config_files/pymssql/invalid_custom_params.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=pymssql
-dbName=db
-dbUsername=SA
-dbPassword=MyPass1234!
-dbHost=127.0.0.1
-dbPort=1433
+db_module=pymssql
+db_name=db
+db_user=SA
+db_password=MyPass1234!
+db_host=127.0.0.1
+db_port=1433
 blah=blah
\ No newline at end of file
diff --git a/test/resources/config_files/pymssql/old_param_names.cfg b/test/resources/config_files/pymssql/old_param_names.cfg
new file mode 100644
index 0000000..00a68ad
--- /dev/null
+++ b/test/resources/config_files/pymssql/old_param_names.cfg
@@ -0,0 +1,7 @@
+[default]
+dbapiModuleName=pymssql
+dbName=db
+dbUsername=SA
+dbPassword=MyPass1234!
+dbHost=127.0.0.1
+dbPort=1433
\ No newline at end of file
diff --git a/test/resources/config_files/pymssql/simple_default_alias.cfg b/test/resources/config_files/pymssql/simple_default_alias.cfg
index 00a68ad..cd111ab 100644
--- a/test/resources/config_files/pymssql/simple_default_alias.cfg
+++ b/test/resources/config_files/pymssql/simple_default_alias.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=pymssql
-dbName=db
-dbUsername=SA
-dbPassword=MyPass1234!
-dbHost=127.0.0.1
-dbPort=1433
\ No newline at end of file
+db_module=pymssql
+db_name=db
+db_user=SA
+db_password=MyPass1234!
+db_host=127.0.0.1
+db_port=1433
\ No newline at end of file
diff --git a/test/resources/config_files/pymssql/some_basic_params_missing.cfg b/test/resources/config_files/pymssql/some_basic_params_missing.cfg
index af0f2d7..20e4533 100644
--- a/test/resources/config_files/pymssql/some_basic_params_missing.cfg
+++ b/test/resources/config_files/pymssql/some_basic_params_missing.cfg
@@ -1,3 +1,3 @@
 [default]
-dbapiModuleName=pymssql
-dbName=db
\ No newline at end of file
+db_module=pymssql
+db_name=db
\ No newline at end of file
diff --git a/test/resources/config_files/pymssql/valid_custom_params.cfg b/test/resources/config_files/pymssql/valid_custom_params.cfg
index 4ba6dd2..47613a2 100644
--- a/test/resources/config_files/pymssql/valid_custom_params.cfg
+++ b/test/resources/config_files/pymssql/valid_custom_params.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=pymssql
-dbName=db
+db_module=pymssql
+db_name=db
 user=SA
 password=MyPass1234!
-dbHost=127.0.0.1
-dbPort=1433
\ No newline at end of file
+db_host=127.0.0.1
+db_port=1433
\ No newline at end of file
diff --git a/test/resources/config_files/pymssql/wrong_password.cfg b/test/resources/config_files/pymssql/wrong_password.cfg
index df8b822..04b37f2 100644
--- a/test/resources/config_files/pymssql/wrong_password.cfg
+++ b/test/resources/config_files/pymssql/wrong_password.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=pymssql
-dbName=db
-dbUsername=SA
-dbPassword=wrong
-dbHost=127.0.0.1
-dbPort=1433
\ No newline at end of file
+db_module=pymssql
+db_name=db
+db_user=SA
+db_password=wrong
+db_host=127.0.0.1
+db_port=1433
\ No newline at end of file
diff --git a/test/resources/config_files/pymysql/charset_invalid.cfg b/test/resources/config_files/pymysql/charset_invalid.cfg
index e64b4d8..9eb9a14 100644
--- a/test/resources/config_files/pymysql/charset_invalid.cfg
+++ b/test/resources/config_files/pymysql/charset_invalid.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=pymysql
-dbName=db
+db_module=pymysql
+db_name=db
 user=db_user
 password=pass
-dbHost=127.0.0.1
-dbPort=3306
-dbCharset=wrong
\ No newline at end of file
+db_host=127.0.0.1
+db_port=3306
+db_charset=wrong
\ No newline at end of file
diff --git a/test/resources/config_files/pymysql/custom_param_password.cfg b/test/resources/config_files/pymysql/custom_param_password.cfg
index dd211e0..52b68e7 100644
--- a/test/resources/config_files/pymysql/custom_param_password.cfg
+++ b/test/resources/config_files/pymysql/custom_param_password.cfg
@@ -1,6 +1,6 @@
 [default]
-dbapiModuleName=pymysql
-dbName=db
+db_module=pymysql
+db_name=db
 password=pass
-dbHost=127.0.0.1
-dbPort=3306
\ No newline at end of file
+db_host=127.0.0.1
+db_port=3306
\ No newline at end of file
diff --git a/test/resources/config_files/pymysql/invalid_custom_params.cfg b/test/resources/config_files/pymysql/invalid_custom_params.cfg
index 31e3a20..46975ef 100644
--- a/test/resources/config_files/pymysql/invalid_custom_params.cfg
+++ b/test/resources/config_files/pymysql/invalid_custom_params.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=pymysql
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=3306
+db_module=pymysql
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=3306
 blah=blah
\ No newline at end of file
diff --git a/test/resources/config_files/pymysql/old_param_names.cfg b/test/resources/config_files/pymysql/old_param_names.cfg
new file mode 100644
index 0000000..0d73312
--- /dev/null
+++ b/test/resources/config_files/pymysql/old_param_names.cfg
@@ -0,0 +1,7 @@
+[default]
+dbapiModuleName=pymysql
+dbName=db
+dbUsername=db_user
+dbPassword=pass
+dbHost=127.0.0.1
+dbPort=3306
\ No newline at end of file
diff --git a/test/resources/config_files/pymysql/simple_default_alias.cfg b/test/resources/config_files/pymysql/simple_default_alias.cfg
index 0d73312..d4242af 100644
--- a/test/resources/config_files/pymysql/simple_default_alias.cfg
+++ b/test/resources/config_files/pymysql/simple_default_alias.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=pymysql
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=3306
\ No newline at end of file
+db_module=pymysql
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=3306
\ No newline at end of file
diff --git a/test/resources/config_files/pymysql/some_basic_params_missing.cfg b/test/resources/config_files/pymysql/some_basic_params_missing.cfg
index e341dc9..f6c24e4 100644
--- a/test/resources/config_files/pymysql/some_basic_params_missing.cfg
+++ b/test/resources/config_files/pymysql/some_basic_params_missing.cfg
@@ -1,3 +1,3 @@
 [default]
-dbapiModuleName=pymysql
-dbName=db
\ No newline at end of file
+db_module=pymysql
+db_name=db
\ No newline at end of file
diff --git a/test/resources/config_files/pymysql/valid_custom_params.cfg b/test/resources/config_files/pymysql/valid_custom_params.cfg
index 4df80c1..dcd264a 100644
--- a/test/resources/config_files/pymysql/valid_custom_params.cfg
+++ b/test/resources/config_files/pymysql/valid_custom_params.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=pymysql
-dbName=db
+db_module=pymysql
+db_name=db
 user=db_user
 password=pass
-dbHost=127.0.0.1
-dbPort=3306
\ No newline at end of file
+db_host=127.0.0.1
+db_port=3306
\ No newline at end of file
diff --git a/test/resources/config_files/pymysql/wrong_password.cfg b/test/resources/config_files/pymysql/wrong_password.cfg
index 9ce8ca7..5d8921e 100644
--- a/test/resources/config_files/pymysql/wrong_password.cfg
+++ b/test/resources/config_files/pymysql/wrong_password.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=pymysql
-dbName=db
-dbUsername=db_user
-dbPassword=wrong
-dbHost=127.0.0.1
-dbPort=3306
\ No newline at end of file
+db_module=pymysql
+db_name=db
+db_user=db_user
+db_password=wrong
+db_host=127.0.0.1
+db_port=3306
\ No newline at end of file
diff --git a/test/resources/config_files/pyodbc/charset_invalid.cfg b/test/resources/config_files/pyodbc/charset_invalid.cfg
index 73a0be8..356dbf6 100644
--- a/test/resources/config_files/pyodbc/charset_invalid.cfg
+++ b/test/resources/config_files/pyodbc/charset_invalid.cfg
@@ -1,9 +1,9 @@
 [default]
-dbapiModuleName=pyodbc
-dbName=db
+db_module=pyodbc
+db_name=db
 user=db_user
 password=pass
-dbHost=127.0.0.1
-dbPort=3306
-dbDriver={MySQL ODBC 8.0 ANSI Driver}
-dbCharset=wrong
\ No newline at end of file
+db_host=127.0.0.1
+db_port=3306
+odbc_driver={MySQL ODBC 8.0 ANSI Driver}
+db_charset=wrong
\ No newline at end of file
diff --git a/test/resources/config_files/pyodbc/custom_param_password.cfg b/test/resources/config_files/pyodbc/custom_param_password.cfg
index 6021e0a..56650c9 100644
--- a/test/resources/config_files/pyodbc/custom_param_password.cfg
+++ b/test/resources/config_files/pyodbc/custom_param_password.cfg
@@ -1,7 +1,7 @@
 [default]
-dbapiModuleName=pyodbc
-dbName=db
+db_module=pyodbc
+db_name=db
 PWD=pass
-dbHost=127.0.0.1
-dbPort=3306
-dbDriver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
+db_host=127.0.0.1
+db_port=3306
+odbc_driver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
diff --git a/test/resources/config_files/pyodbc/invalid_custom_params.cfg b/test/resources/config_files/pyodbc/invalid_custom_params.cfg
index 7fe6682..8bb0d5d 100644
--- a/test/resources/config_files/pyodbc/invalid_custom_params.cfg
+++ b/test/resources/config_files/pyodbc/invalid_custom_params.cfg
@@ -1,9 +1,9 @@
 [default]
-dbapiModuleName=pyodbc
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=3306
-dbDriver={MySQL ODBC 8.0 ANSI Driver}
+db_module=pyodbc
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=3306
+odbc_driver={MySQL ODBC 8.0 ANSI Driver}
 blah=blah
\ No newline at end of file
diff --git a/test/resources/config_files/pyodbc/old_param_names.cfg b/test/resources/config_files/pyodbc/old_param_names.cfg
new file mode 100644
index 0000000..d7cf249
--- /dev/null
+++ b/test/resources/config_files/pyodbc/old_param_names.cfg
@@ -0,0 +1,8 @@
+[default]
+dbapiModuleName=pyodbc
+dbName=db
+dbUsername=db_user
+dbPassword=pass
+dbHost=127.0.0.1
+dbPort=3306
+dbDriver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
diff --git a/test/resources/config_files/pyodbc/simple_default_alias.cfg b/test/resources/config_files/pyodbc/simple_default_alias.cfg
index d7cf249..9feac87 100644
--- a/test/resources/config_files/pyodbc/simple_default_alias.cfg
+++ b/test/resources/config_files/pyodbc/simple_default_alias.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=pyodbc
-dbName=db
-dbUsername=db_user
-dbPassword=pass
-dbHost=127.0.0.1
-dbPort=3306
-dbDriver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
+db_module=pyodbc
+db_name=db
+db_user=db_user
+db_password=pass
+db_host=127.0.0.1
+db_port=3306
+odbc_driver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
diff --git a/test/resources/config_files/pyodbc/some_basic_params_missing.cfg b/test/resources/config_files/pyodbc/some_basic_params_missing.cfg
index 436ebc9..16a3448 100644
--- a/test/resources/config_files/pyodbc/some_basic_params_missing.cfg
+++ b/test/resources/config_files/pyodbc/some_basic_params_missing.cfg
@@ -1,3 +1,3 @@
 [default]
-dbapiModuleName=pyodbc
-dbName=db
\ No newline at end of file
+db_module=pyodbc
+db_name=db
\ No newline at end of file
diff --git a/test/resources/config_files/pyodbc/valid_custom_params.cfg b/test/resources/config_files/pyodbc/valid_custom_params.cfg
index eab93c8..a51f5e2 100644
--- a/test/resources/config_files/pyodbc/valid_custom_params.cfg
+++ b/test/resources/config_files/pyodbc/valid_custom_params.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=pyodbc
-dbName=db
+db_module=pyodbc
+db_name=db
 UID=db_user
 PWD=pass
-dbHost=127.0.0.1
-dbPort=3306
-dbDriver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
+db_host=127.0.0.1
+db_port=3306
+odbc_driver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
diff --git a/test/resources/config_files/pyodbc/wrong_password.cfg b/test/resources/config_files/pyodbc/wrong_password.cfg
index ac7a25c..150c0c9 100644
--- a/test/resources/config_files/pyodbc/wrong_password.cfg
+++ b/test/resources/config_files/pyodbc/wrong_password.cfg
@@ -1,8 +1,8 @@
 [default]
-dbapiModuleName=pyodbc
-dbName=db
-dbUsername=db_user
-dbPassword=wrong
-dbHost=127.0.0.1
-dbPort=3306
-dbDriver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
+db_module=pyodbc
+db_name=db
+db_user=db_user
+db_password=wrong
+db_host=127.0.0.1
+db_port=3306
+odbc_driver={MySQL ODBC 8.0 ANSI Driver}
\ No newline at end of file
diff --git a/test/resources/config_files/sqlite3/old_param_names.cfg b/test/resources/config_files/sqlite3/old_param_names.cfg
new file mode 100644
index 0000000..4a8047b
--- /dev/null
+++ b/test/resources/config_files/sqlite3/old_param_names.cfg
@@ -0,0 +1,4 @@
+[default]
+dbapiModuleName=sqlite3
+database=./${DBName}.db
+isolation_level=
\ No newline at end of file
diff --git a/test/resources/config_files/sqlite3/simple_default_alias.cfg b/test/resources/config_files/sqlite3/simple_default_alias.cfg
index 4a8047b..bdc48bd 100644
--- a/test/resources/config_files/sqlite3/simple_default_alias.cfg
+++ b/test/resources/config_files/sqlite3/simple_default_alias.cfg
@@ -1,4 +1,4 @@
 [default]
-dbapiModuleName=sqlite3
+db_module=sqlite3
 database=./${DBName}.db
 isolation_level=
\ No newline at end of file
diff --git a/test/tests/utests/test_connection_manager.py b/test/tests/utests/test_connection_manager.py
index 1f55c45..f53d8f0 100644
--- a/test/tests/utests/test_connection_manager.py
+++ b/test/tests/utests/test_connection_manager.py
@@ -15,9 +15,9 @@ class TestConnectWithConfigFile:
         config_path = str(TEST_DATA / "empty.cfg")
         with pytest.raises(
             ValueError,
-            match="Required parameter 'dbapiModuleName' was not provided - neither in keyword arguments nor in config file",
+            match="Required parameter 'db_module' was not provided - neither in keyword arguments nor in config file",
         ):
-            conn_manager.connect_to_database(dbConfigFile=config_path)
+            conn_manager.connect_to_database(config_file=config_path)
 
     def test_aliased_section(self):
         conn_manager = ConnectionManager()
@@ -25,11 +25,11 @@ class TestConnectWithConfigFile:
         with patch("importlib.import_module", new=MagicMock()) as client:
             conn_manager.connect_to_database(
                 "my_client",
-                dbUsername="name",
-                dbPassword="password",
-                dbHost="host",
-                dbPort=0,
-                dbConfigFile=config_path,
+                db_user="name",
+                db_password="password",
+                db_host="host",
+                db_port=0,
+                config_file=config_path,
                 alias="alias2",
             )
             client.return_value.connect.assert_called_with(
diff --git a/test/tests/utests/test_data/alias.cfg b/test/tests/utests/test_data/alias.cfg
index 06d0431..51b5ee5 100644
--- a/test/tests/utests/test_data/alias.cfg
+++ b/test/tests/utests/test_data/alias.cfg
@@ -1,2 +1,2 @@
 [alias2]
-dbName = example
+db_name = example
diff --git a/test/tests/utests/test_data/no_option.cfg b/test/tests/utests/test_data/no_option.cfg
index 4e0db9e..53c0731 100644
--- a/test/tests/utests/test_data/no_option.cfg
+++ b/test/tests/utests/test_data/no_option.cfg
@@ -1,3 +1,3 @@
 [default]
-dbName = example
-dbUsername = example
\ No newline at end of file
+db_name = example
+db_user = example
\ No newline at end of file