// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/sqlserver-source.svg[] Microsoft SQL Server Source

*Provided by: "Apache Software Foundation"*

*Support Level for this Kamelet is: "Preview"*

Query data from a Microsoft SQL Server Database.

In you KameletBinding file you'll need to explicitly declare the SQL Server driver dependency in spec->integration->dependencies

- "mvn:com.microsoft.sqlserver:mssql-jdbc:<version>"

== Configuration Options

The following table summarizes the configuration options available for the `sqlserver-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *databaseName {empty}* *| Database Name| The Database Name we are pointing| string| | 
| *password {empty}* *| Password| The password to use for accessing a secured SQL Server Database| string| | 
| *query {empty}* *| Query| The Query to execute against the SQL Server Database| string| | `"INSERT INTO accounts (username,city) VALUES (:#username,:#city)"`
| *serverName {empty}* *| Server Name| Server Name for the data source| string| | `"localhost"`
| *username {empty}* *| Username| The username to use for accessing a secured SQL Server Database| string| | 
| consumedQuery| Consumed Query| A query to run on a tuple consumed| string| | `"DELETE FROM accounts where user_id = :#user_id"`
| serverPort| Server Port| Server Port for the data source| string| `1433`| 
|===

NOTE: Fields marked with ({empty}*) are mandatory.

== Usage

This section summarizes how the `sqlserver-source` can be used in various contexts.

=== Knative Source

The `sqlserver-source` Kamelet can be used as Knative source by binding it to a Knative object.

.sqlserver-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: sqlserver-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: sqlserver-source
    properties:
      databaseName: "The Database Name"
      password: "The Password"
      query: "INSERT INTO accounts (username,city) VALUES (:#username,:#city)"
      serverName: "localhost"
      username: "The Username"
  sink:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  
----
Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `sqlserver-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f sqlserver-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:jackson

- camel:kamelet

- camel:sql

- mvn:org.apache.commons:commons-dbcp2:2.8.0
 

==== *Binding to Knative using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind sqlserver-source -p "source.databaseName=The Database Name" -p "source.password=The Password" -p "source.query=INSERT INTO accounts (username,city) VALUES (:#username,:#city)" -p "source.serverName=localhost" -p "source.username=The Username" channel/mychannel
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

=== Kafka Source

The `sqlserver-source` Kamelet can be used as Kafka source by binding it to a Kafka topic.

.sqlserver-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: sqlserver-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: sqlserver-source
    properties:
      databaseName: "The Database Name"
      password: "The Password"
      query: "INSERT INTO accounts (username,city) VALUES (:#username,:#city)"
      serverName: "localhost"
      username: "The Username"
  sink:
    ref:
      kind: KafkaTopic
      apiVersion: kafka.strimzi.io/v1beta1
      name: my-topic
  
----

Ensure that you've installed https://strimzi.io/[Strimzi] and created a topic named `my-topic` in the current namespace.
Make also sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `sqlserver-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f sqlserver-source-binding.yaml
----

==== *Binding to Kafka using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind sqlserver-source -p "source.databaseName=The Database Name" -p "source.password=The Password" -p "source.query=INSERT INTO accounts (username,city) VALUES (:#username,:#city)" -p "source.serverName=localhost" -p "source.username=The Username" kafka.strimzi.io/v1beta1:KafkaTopic:my-topic
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
