From df6b987ccff98dd7314b59270aeec44b7909820f Mon Sep 17 00:00:00 2001 From: AdalbertMemSQL Date: Mon, 2 Sep 2024 14:52:45 +0300 Subject: [PATCH] Add SingleStore connector (#257) This PR adds singlestore connector. --------- Co-authored-by: Adalbert Makarovych --- registry/hasura/singlestore/README.md | 147 ++++++++++++++++++ registry/hasura/singlestore/logo.png | Bin 0 -> 47417 bytes registry/hasura/singlestore/metadata.json | 43 +++++ .../releases/v0.0.1/connector-packaging.json | 11 ++ 4 files changed, 201 insertions(+) create mode 100644 registry/hasura/singlestore/README.md create mode 100644 registry/hasura/singlestore/logo.png create mode 100644 registry/hasura/singlestore/metadata.json create mode 100644 registry/hasura/singlestore/releases/v0.0.1/connector-packaging.json diff --git a/registry/hasura/singlestore/README.md b/registry/hasura/singlestore/README.md new file mode 100644 index 00000000..f5efeef7 --- /dev/null +++ b/registry/hasura/singlestore/README.md @@ -0,0 +1,147 @@ +# SingleStore Data Connector + + + + +[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/latest/connectors/singesltore/) +[![ndc-hub](https://img.shields.io/badge/ndc--hub-singlestore-blue.svg?style=flat)](https://hasura.io/connectors/singlestore) +[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE) +[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md) + +The Hasura SingleStore Connector ("the connector") enables you to connect to a SingleStore database and gives instant access to a GraphQL API on top of your data. + +This connector is built using the [Typescript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and, it implements the [Data Connector Spec](https://github.com/hasura/ndc-spec). + + +- [See the listing in the Hasura Hub](https://hasura.io/connectors/singlestore) +- [Hasura V3 Documentation](https://hasura.io/docs/3.0) + +## Features + +The following matrix lists the features supported by the Hasura SingleStore connector: + +| Feature | Supported | Notes | +| ------------------------------- | --------- | ----- | +| Native Queries + Logical Models | ❌ | | +| Simple Object Query | ✅ | | +| Filter / Search | ✅ | | +| Simple Aggregation | ✅ | | +| Sort | ✅ | | +| Paginate | ✅ | | +| Table Relationships | ✅ | | +| Views | ✅ | | +| Distinct | ✅ | | +| Remote Relationships | ✅ | | +| Mutations | ❌ | coming soon | + +## Prerequisites + +Ensure that the following prerequisites are met before using the connector: + +1. Install [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and [Docker](https://docs.docker.com/engine/install/). +2. Initialize a [supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph). +3. Initialize a [subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph). +4. An active [SingleStore](https://www.singlestore.com/) deployment that serves as the data source for the API. + + +## Using the SingleStore connector + +The following steps explain how to initialize and configure the connector for local development. For information on deploying a connector after it has been configured, refer to [Deploy a Connector](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector). + +### Step 1: Authenticate your CLI session + +```bash +ddn auth login +``` + +### Step 2: Configure the connector + +After the supergraph and subgraph have been initialized (refer to [Prerequisites](#Prerequisites), run the initialization command in interactive mode. Specify a name for the connector in the command. + +```bash +ddn connector init -i +``` + +#### Step 2.1: Select the SingleStore connector + +From the list of connectors, select `singlestore`. + +#### Step 2.2: Select a port for the connector +The CLI prompts you to specify a port for running the connector. Either select the default port suggested or choose a port that is not currently in use. + +#### Step 2.3: Provide the environment variable(s) for the connector + +Specify the connection string used to connect to the SingleStore database using the `SINGLESTORE_URL` variable. The connection string must be in the `mysql://[[:]][@:[]]/[][?=[&=]]` format. + +For example: + +```env +SINGLESTORE_URL=singlestore://username:password@hostname/database +``` +The connector uses [MySQL2](https://sidorares.github.io/node-mysql2/docs) library to establish a connection. +For more information, refer to [Connection options](https://www.npmjs.com/package/mysql#connection-options) and [Pool options](https://www.npmjs.com/package/mysql#pool-options). + +Alternatively, you can also set following environment variables instead of the `SINGLELSTORE_URL` variable: + +| Name | Default | Description | +|-------------------------------------|-------------|-------------| +| SINGLESTORE_HOST | localhost | Hostname of the SingleStore database to connect with. | +| SINGLESTORE_PORT | 3306 | Port number of the SingleStore database. | +| SINGLESTORE_PASSWORD | | Password of the SingleStore database user. | +| SINGLESTORE_DATABASE | | Name of the SingleStore database to connect with. | +| SINGLESTORE_SSL_CA | | Path to the trusted CA certificate file. | +| SINGLESTORE_SSL_CERT | | Path to the certificate chain file in PEM format. | +| SINGLESTORE_SSL_KEY | | Path to the private key file in PEM format. | +| SINGLESTORE_SSL_CIPHERS | | Cipher suite specification. If specified, it replaces the default value. | +| SINGLESTORE_SSL_PASSPHRASE | | Cipher suite specification. If specified, it replaces the default value. | +| SINGLESTORE_SSL_REJECT_UNAUTHORIZED | true | If enabled, the server rejects any connection that is not authorized with the list of supplied CAs. | + +If `SINGLELSTORE_URL` is set these variables are ignored. + +### Step 3: Introspect your data source + +After configuring the connector, use the CLI to introspect the SingleStore database and create a source-specific configuration file for the connector (`configuration.json`). + +```bash +ddn connector introspect +``` + +## Step 4: Add your resources + +This command will create `.hml` files for each table and view in your database +and an `.hml` file with information about SingleStore data types. + +```bash +ddn connector-link add-resources +``` + +## Step 5. Add relationships + +SingleStore does not support foreign keys. Relationships between tables must be added manually. You can define relationships by appending relationship information to the `.hml` files generated in the previous step. +For information on defining relationships, refer to [Relationships](https://hasura.io/docs/3.0/supergraph-modeling/relationships/). +For example, to add a relationship from a `message` table to the `user` table, append following text to the +`DbMessage.hml` file: +```hml +--- +kind: Relationship +version: v1 +definition: + name: user + sourceType: DbMessage + target: + model: + name: DbUser + subgraph: app + relationshipType: Object + mapping: + - source: + fieldPath: + - fieldName: userId + target: + modelField: + - fieldName: id + description: The user details for a message +``` +## License + +The SingleStore connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). diff --git a/registry/hasura/singlestore/logo.png b/registry/hasura/singlestore/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c3eee058bdb65969472ad142a6d5f4b993c4b75a GIT binary patch literal 47417 zcmYg%WmFu^)-~>ypg{%?ZV5IxAq01K2@)*G;O_1k0t^xo+=A<%L4&*d;0^-;hL_y? zea~}$^we~()vM~9K4;giv#X+1m1S_T$gvO*5OC#W->V}aAn!f@pTt0W{#__N`1#ym zI?3vR5D-Wh|6Yi4>I`Sk4-rA?GVc&7M=AH8Z&0iyl_U`mY7(#?%uo>!nnvZ`OKN%| z9zEiw8tJ$L&`$hJh~e|LBn*x32v#k%Oq1I zte`}GZXicZM!?d#9vuZ*pZbk9S7D)GHNj?ls%~URR()VAPd;nyu%)#|*az-dDr4lY z=UgE8sm*)Am*H9ndj#H8=%P=~nFyGWkQ||RQWH@LcU8dZB8?(Y7Q!*dVZZW9I zt}sRbBF0TbNGW>5W`^a{-Aiq!k_(g${Ifs!NSs0c?}fk32ec34OgIp1-c$SoXN(~s zMDH*vR<5E5ou|xhwm%yi1NToE57i3rLmdwsIF#63V-EM9uJVn@B-bQwe=;3_UAYk04iv|CC?ipfvd`ok zir()c+XT#{T=($>X5i~h0RO)?x=cS&ei-+lX)6$0LliV(K8VUzP-|w$*9j}Y%Z31q zN$wG#_?ft?|MlHpSCEIixZ>F4YZAMRWNHBCjsD4j6(i5NNxTI&hR<>G^asHDFusPKvGJ#z;9T#W@7G8x(FO3iPn^izhv+I!CoQa(b;y9- zpht;e(G;y@KnK)0yUlu&b1f;w)#>S!QN|N9U%v&_u1X9&!h8Hp2bSw1mydDupmgex z7u{~>b{p2xA*9T+RSND+a})!=d_{lok3+l8Ou2(O&n$ecuzpyHviZ%PlBo0!LLy|4 zcdU|sGYBPKiltlxa^t*dj^8$nYDv75?Uob!7E?z_uaxk#?>SJe6Y2kT6cVrk+EDP* z6@Q}ieR^3J%H?yt24VO7`AEnt@2$06oWXyangJL94mv4%9me=$j|KD|o&Gz9YR02a z!2sDi<9Wa3l--YDmoabu2WCPmrUOr!#gUdC0(Ckg*45rr13A9p(s((oge$`$mH~l6 zON7)@o|+KX5lu#pj(d6|DD8mTnbwpHt3Ny#?`SOB~Tcqm)`R zeNFt}Vw8o?V*DE=?^A{(;Y7!N5>NB%?9fEvn)Zxg5=%gGa@FDVWx3~ILcmD?c0k+2 z^7UMx)eU0y6^bunNoBS|J?#DL%mrueWs`XlY|ZElIalDY_1`RP6L-gv44_!e39QV%5a9~65q@=efxelpXNX|Yku{x`Cy~WAB&r44e{#1g;d9M z=Ru`=1Hc=Ym<2HSNjst-4Xb|l6@+IS6j9(PG$1IQ4;9npyKMq4)>Yq^Jnx z#;cHjOVoQ$Hp5xQaI8gSM))sfyLi41zIEoraIdQ(Ep1|5vkf98rU+XXj&<88RLxEV zJu17M3o5-rVNUZ-&%!4m4B4Hk!U?OQ!gf1KE?{w$CJPgmhJgi{i^T$_Wo3C{GIf8nn7H$-ku%{De$)eIMr%>YyV=!uUCZ9G@Sc$FpsN}O|u>;gcv6G_T;;-J^7NhY)G7dGIw z*iQw}3s7KKeNLSN1<`x4lw`tqEEk?*!xv=uf|;pHIT~w4EPTa!q$yH&K zjCrNJP&$_1s0|nU*@AgMMz$+0bTIui@%wQ>UiJxcr~-Va8A?&z{-lsM)!V$!gWq1) z`c2aKxwzjDLJ1S@UQA~L*|rw zq&B}9pWj?Q;Di-NsD6Gi)U&B3KAfvrk8Wy>n6PJI+%`IHgnqlpH|q93-Z{RC1A@@&ahV)u=_K80Jg?gOF=9>GakOv=Q2Se9a{Ei?R(#Hvq+g*XI zQH7|%azlB1Mo_T6W zqPp5)YsRw@Yi~+0$5}fI_wc_6Iu9hneje7PQ8l3as6W(G=HMVTPpX7-PRow**EMcG!loZ}Yzr&Jp=@66+4*7;<2>obAiglLh360^=}$b>F`X*X`mΝ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⩔PuzDH{2E&d-r(>0%cRE54xFY%_v;hCeVD}e~ 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 literal 0 HcmV?d00001 diff --git a/registry/hasura/singlestore/metadata.json b/registry/hasura/singlestore/metadata.json new file mode 100644 index 00000000..29d8d6d6 --- /dev/null +++ b/registry/hasura/singlestore/metadata.json @@ -0,0 +1,43 @@ +{ + "overview": { + "namespace": "hasura", + "description": "The Hasura SingleStore Connector enables you to connect to a SingleStore database and gives instant access to a GraphQL API on top of your data.", + "title": "SingleStore Data Connector", + "logo": "logo.png", + "tags": [ + "database" + ], + "latest_version": "v0.0.1" + }, + "author": { + "support_email": "integrations@singlestore.com", + "homepage": "https://www.singlestore.com/", + "name": "SingleStore" + }, + "is_verified": false, + "is_hosted_by_hasura": false, + "packages": [ + { + "version": "0.0.1", + "uri": "https://github.com/singlestore-labs/singlestore-hasura-connector/releases/download/v0.0.1/connector-definition.tgz", + "checksum": { + "type": "sha256", + "value": "7cc9f73cb966c2b69ef54d5f0e346407d3555ed1ac08f361f16157540bb80041" + }, + "source": { + "hash": "a9caa889c13a251040003c0934c7e67fccfd7de4" + } + } + ], + "source_code": { + "is_open_source": true, + "repository": "https://github.com/singlestore-labs/singlestore-hasura-connector/", + "version": [ + { + "tag": "v0.0.1", + "hash": "a9caa889c13a251040003c0934c7e67fccfd7de4", + "is_verified": false + } + ] + } +} \ No newline at end of file diff --git a/registry/hasura/singlestore/releases/v0.0.1/connector-packaging.json b/registry/hasura/singlestore/releases/v0.0.1/connector-packaging.json new file mode 100644 index 00000000..ba22dd94 --- /dev/null +++ b/registry/hasura/singlestore/releases/v0.0.1/connector-packaging.json @@ -0,0 +1,11 @@ +{ + "version": "0.0.1", + "uri": "https://github.com/singlestore-labs/singlestore-hasura-connector/releases/download/v0.0.1/connector-definition.tgz", + "checksum": { + "type": "sha256", + "value": "7cc9f73cb966c2b69ef54d5f0e346407d3555ed1ac08f361f16157540bb80041" + }, + "source": { + "hash": "a9caa889c13a251040003c0934c7e67fccfd7de4" + } +} \ No newline at end of file