Hi All,

Currently, some components in the Product SP uses query templates for
executing the database operation with the different databases. Those
queries have default values set up by the respective component itself.
Also, it has a capability of overriding these functionalities using the
deployment.yaml file.
But as this kind of redundant works for each component, we are planned to
unify the query configuration reader by implementing the common database
query configuration reader manager.

Let me explain the targeted implementation:

   1. We identify that databases can have two metadata properties name and
   version. So, we have to map the template queries with the database name
   and version.
   2. Each component should map their default query templates into above
   map. And provide it while initializing the Query Manager.
   3. Other than the above map query manager required:
   1. *Component Name*(1): a unique name given for each component where it
      will define the ownership of the template queries in the deployment.yaml.
      2. *Database name and version* (2)(3): the required name and the
      version need to maintained in the current query entry key(this
will be the
      default key in the base query map).
   4. The query manager uses the carbon.config.provider service for access
   deployment.yaml and provide the Query Manager service for other
   components.
   5. While initializing the *Query Manager* following sequence will be
   executed:
      1. First, it will get the available *queries*(4) in the
      deployment.yaml file using the component name and then it will
override the
      default config map( merge and insert any new configuration).
      2. Then it will initialize *Query Config Reader* with the following
      capability:
      - *Base Query Map *This is the base query map which has all the
         available query configuration. This is the resulting map of
above-mentioned
         query config merge operation.
      - *Current Query Key* This will maintained the current query key for
         user-selected database name and version in Base Query Map.
      - Method for altering the current query key.
         - Method for getting the query template.
      3. Finally, it will return the Query Config Reader object.
   6. The deployment.yaml entries will be as follows:

wso2.database.template.queries:
  components:
    -
      name: test-component* -------------------------(1)*
      databases:
        -
          name: h2*------------------------(2)*
          version: ~*----------------------(3)*
          queries:-----------------------(4)
            countQuery: "SELECT COUNT(*) FROM {{TABLE_NAME}} WHERE
siddhiAppName = ?"
              createTableQuery: "CREATE TABLE {{TABLE_NAME}} (id INT
NOT NULL AUTO_INCREMENT, siddhiAppName VARCHAR(100), revision
VARCHAR(100), snapshot BLOB, PRIMARY KEY (id))"
              deleteQuery: "DELETE FROM {{TABLE_NAME}} WHERE id IN
(SELECT id FROM {{TABLE_NAME}} WHERE siddhiAppName = ? ORDER BY id ASC
LIMIT ?)"
              insertTableQuery: "INSERT INTO {{TABLE_NAME}}
(siddhiAppName, revision, snapshot) VALUES (?, ?, ?)"
              isTableExistQuery: "SELECT * FROM {{TABLE_NAME}} limit 1"
              selectLastQuery: "SELECT revision FROM {{TABLE_NAME}}
WHERE siddhiAppName = ? ORDER BY id DESC LIMIT 1"
              selectTableQuery: "SELECT snapshot FROM {{TABLE_NAME}}
WHERE  revision = ? AND siddhiAppName = ?"
        -
          name: oracle
          version: 11g
          queries:
            countQuery: "SELECT COUNT(*) FROM {{TABLE_NAME}} WHERE
siddhiAppName = ?"
              createTableQuery: "CREATE TABLE {{TABLE_NAME}}
(siddhiAppName VARCHAR2(100) NOT NULL, revision VARCHAR2(100),
snapshot BLOB)"
              deleteQuery: "DELETE {{TABLE_NAME}} WHERE revision in
(SELECT revision from (SELECT * FROM {{TABLE_NAME}} WHERE
siddhiAppName = ? ORDER BY revision ASC) WHERE rownum<=?)"
              insertTableQuery: "INSERT INTO {{TABLE_NAME}}
(siddhiAppName, revision, snapshot) VALUES (?, ?, ?)"
              isTableExistQuery: "SELECT 1 FROM {{TABLE_NAME}} WHERE rownum=1"
              selectLastQuery: "SELECT revision FROM (SELECT revision
FROM {{TABLE_NAME}} WHERE siddhiAppName = ? ORDER BY revision DESC)
WHERE rownum=1"
              selectTableQuery: "SELECT snapshot FROM {{TABLE_NAME}}
WHERE  revision = ? AND siddhiAppName = ?"

Thank You
-- 
<http://wso2.com/signature>
Sajith Dimal
Software Engineer
Email : [email protected]
Mobile : +94783101496
WSO2 Inc. | http://wso2.com
lean.enterprise.middleware
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to