<?xml version="1.0"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>lens.driver.jdbc.connection.provider</name>
    <value></value>
    <description>A contract for obtaining JDBC connections</description>
  </property>

  <property>
    <name>lens.driver.jdbc.connection.properties</name>
    <value></value>
    <description>Connection properties for jdbc connection.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.query.rewriter</name>
    <value>org.apache.lens.driver.jdbc.ColumnarSQLRewriter</value>
    <description>Rewriting the HQL to optimized sql queries</description>
  </property>

  <property>
    <name>lens.driver.jdbc.regex.replacement.values</name>
    <value>to_date=date, format_number=format, date_sub\((.*?)\,\s*([0-9]+\s*)\)=date_sub($1\, interval $2 day), date_add\((.*?)\,\s*([0-9]+\s*)\)=date_add($1\, interval $2 day)</value>
    <description>Rewriting the HQL to optimized sql queries</description>
  </property>

  <property>
    <name>lens.driver.jdbc.driver.class</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Type of JDBC driver used to connect backend database</description>
  </property>

  <property>
    <name>lens.driver.jdbc.db.uri</name>
    <value></value>
    <description>JDBC connection URL in the format jdbc:dbms://host:port/dbname</description>
  </property>

  <property>
    <name>lens.driver.jdbc.db.user</name>
    <value></value>
    <description>The database user on whose behalf the connection is being made</description>
  </property>

  <property>
    <name>lens.driver.jdbc.db.password</name>
    <value></value>
    <description>The database user's password</description>
  </property>

  <property>
    <name>lens.driver.jdbc.pool.max.size</name>
    <value>15</value>
    <description>Maximum number of concurrent connections allowed in pool</description>
  </property>

  <property>
    <name>lens.driver.jdbc.pool.idle.time</name>
    <value>600</value>
    <description>Maximum idle time in sec before a connection is closed</description>
  </property>

  <property>
    <name>lens.driver.jdbc.pool.max.statements</name>
    <value>20</value>
    <description>Maximum number of prepared statements to cache per connection</description>
  </property>

  <property>
    <name>lens.driver.jdbc.get.connection.timeout</name>
    <value>10000</value>
    <description>The number of milliseconds a client calling getConnection() will wait for a Connection to be
      checked-in or acquired when the pool is exhausted. Zero means wait indefinitely. Setting any positive value
      will cause the getConnection () call to time-out and break with an SQLException after the specified number
      of milliseconds. The default value of this property is 10 secs.</description>
  </property>

  <!-- Estimate query connection pool settings -->

  <property>
    <name>lens.driver.jdbc.estimate.connection.properties</name>
    <value></value>
    <description>Connection properties for jdbc estimate connection.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.estimate.driver.class</name>
    <value></value>
    <description>Type of JDBC driver used to connect backend database for estimate queries. If
    This property is not specified, value for lens.driver.jdbc.driver.class will be used.
      Override this property to tune estimate connection pool</description>
  </property>

  <property>
    <name>lens.driver.jdbc.estimate.db.uri</name>
    <value></value>
    <description>JDBC connection URL in the format jdbc:dbms://host:port/dbname for estimate queries.
    If this property is unspecified, value for lens.driver.jdbc.db.uri will be used.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.estimate.db.user</name>
    <value></value>
    <description>The database user on whose behalf the connection is being made, for estimate queries.
    If this property is unspecified, value for lens.driver.jdbc.db.user would be used.
      Override this property to tune estimate connection pool</description>
  </property>

  <property>
    <name>lens.driver.jdbc.estimate.db.password</name>
    <value></value>
    <description>The database user's password, for estimate queries. If this property is unspecified,
      value for lens.driver.jdbc.db.password would be used.
      Override this property to tune estimate connection pool</description>
  </property>

  <property>
    <name>lens.driver.jdbc.estimate.pool.max.size</name>
    <value></value>
    <description>Maximum number of concurrent connections allowed in pool, for estimate queries.
    If this property is unspecified, value for lens.driver.jdbc.pool.max.size would be used.
      Override this property to tune estimate connection pool</description>
  </property>

  <property>
    <name>lens.driver.jdbc.estimate.pool.idle.time</name>
    <value></value>
    <description>Maximum idle time in sec before a connection is closed, for estimate queries.
    If this property is not specified, value for lens.driver.jdbc.pool.idle.time would be used.
      Override this property to tune estimate connection pool.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.estimate.pool.max.statements</name>
    <value></value>
    <description>Maximum number of prepared statements to cache per connection, for estimate queries.
    If this property is not specified, value for lens.driver.jdbc.pool.max.statements would be used.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.estimate.get.connection.timeout</name>
    <value></value>
    <description>Response timeout in milliseconds of any JDBC call invoking data transmission over a connection socket
    , for estimate queries. If this property is not specified, value for lens.driver.jdbc.get.connection.timeout
    would be used. Override this property to tune estimate connection pool.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.explain.keyword</name>
    <value>Explain</value>
    <description>Explain keyword used to get the query plan of underlying database</description>
  </property>

  <!-- query params -->

  <property>
    <name>lens.cube.query.driver.supported.storages</name>
    <value></value>
    <description>List of comma separated storage names that supported by a driver. If no value is specified, all
      storages are valid
    </description>
  </property>

  <property>
    <name>lens.cube.query.replace.timedim</name>
    <value>false</value>
    <description>Tells whether timedim attribute queried in the time range should be replaced with its corresponding
      partition column name.
    </description>
  </property>

  <property>
    <name>lens.cube.query.time.range.writer.class</name>
    <value>org.apache.lens.cube.parse.BetweenTimeRangeWriter</value>
    <description>The timerange writer class which specifies how the resolved partitions in timeranges should be written
      in final query. Available writers are org.apache.lens.cube.parse.ORTimeRangeWriter and
      org.apache.lens.cube.parse.BetweenTimeRangeWriter
    </description>
  </property>

  <property>
    <name>lens.cube.query.partition.where.clause.format</name>
    <value>yyyy-MM-dd HH:mm:ss</value>
    <description>The simple date format of how the queried partition should be put in where clause. If nothing is
      specified, it will use the format from org.apache.lens.cube.metadata.UpdatePeriod for each type of partition
    </description>
  </property>

  <property>
    <name>lens.query.timeout.millis</name>
    <value>3600000</value>
    <description>The runtime(millis) of the query after which query will be timedout and cancelled. Default is 1 hour
      for jdbc queries.
    </description>
  </property>

  <property>
    <name>lens.driver.jdbc.enable.resultset.streaming.retrieval</name>
    <value>false</value>
    <description>Flag to enable row by row retrieval of result set from the database server. This is used to enable
      streaming result sets for MySQL. This is set to false by default.
    </description>
  </property>

  <property>
    <name>lens.driver.jdbc.fetch.size</name>
    <value>1000</value>
    <description>Fetch size for JDBC result set</description>
  </property>

  <property>
    <name>lens.driver.jdbc.validate.through.prepare</name>
    <value>true</value>
    <description>Flag to enable query syntactic and semantic validation using prepared statement.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.query.launching.constraint.factories</name>
    <value>org.apache.lens.server.api.query.constraint.MaxConcurrentDriverQueriesConstraintFactory,
      org.apache.lens.driver.jdbc.MaxJDBCConnectionCheckConstraintFactory</value>
    <description>Factories used to instantiate constraints enforced on queries by driver. A query will be launched
      only if all constraints pass. Every Factory should be an implementation of
      org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create an implementation of
      org.apache.lens.server.api.query.constraint.QueryLaunchingConstraint.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.waiting.queries.selection.policy.factories</name>
    <value>org.apache.lens.server.api.query.collect.DriverSpecificWaitingQueriesSelectionPolicyFactory</value>
    <description>Factories used to instantiate driver specific waiting queries selection policies. Every factory should
      be an implementation of org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create an
      implementation of org.apache.lens.server.api.query.collect.WaitingQueriesSelectionPolicy.</description>
  </property>

  <property>
    <name>driver.max.concurrent.launched.queries</name>
    <value>15</value>
    <description>Maximum queries which can be launched simultaneously on this driver. This should be equal to
      lens.driver.jdbc.pool.max.size. This configuration value is only useful when MaxConcurrentDriverQueriesConstraint
      is enabled by using org.apache.lens.server.api.query.constraint.MaxConcurrentDriverQueriesConstraintFactory as
      one of the factories in lens.driver.jdbc.query.constraint.factories property.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.statement.cancel.supported</name>
    <value>true</value>
    <description>Flag to indicate Whether cancel on JDBC statement is supported. If not supported,
      framework wont call cancel on JDBC statement.</description>
  </property>

  <property>
    <name>lens.driver.jdbc.cost.calculator.class</name>
    <value>org.apache.lens.cube.query.cost.StaticCostCalculator</value>
    <description>Cost calculator class. By default calculating cost through static values </description>
  </property>

  <property>
    <name>lens.driver.query.cost</name>
    <value>0.0</value>
    <description>Jdbc driver static cost value</description>
  </property>

  <property>
    <name>lens.driver.cost.query.decider.class</name>
    <value>org.apache.lens.server.api.query.cost.RangeBasedQueryCostTypeDecider</value>
    <description>Decider class which looks at ranges passed in config and decides the querycosttype </description>
  </property>

  <property>
    <name>lens.driver.cost.type.ranges</name>
    <value>LOW,0.0,HIGH</value>
    <description>Cost based Query type mapping</description>
  </property>

  <property>
    <name>retry.messages.contains.map</name>
    <value>Query not found=org.apache.lens.server.api.retry.ImmediateRetryHandler(2)</value>
    <description>Comma separated error messages and retry policy</description>
  </property>

  <property>
    <name>query.retry.policy.classes</name>
    <value>org.apache.lens.server.api.retry.SubstringMessagePolicyDecider</value>
    <description>List of classes to decide policies</description>
  </property>

  <property>
    <name>lens.cube.query.user.groups.authorization.enable</name>
    <value>false</value>
    <description>true if authorization is based on User Groups, false otherwise</description>
  </property>

  <property>
    <name>lens.cube.query.user.name.authorization.enable</name>
    <value>false</value>
    <description>true if authorization is based on User Name, false otherwise</description>
  </property>

</configuration>
