From 1e5e600c5a64ebb5a9e48ca3a945f34fd6986a71 Mon Sep 17 00:00:00 2001 From: ffranzin Date: Thu, 26 Feb 2026 15:23:47 -0300 Subject: [PATCH 1/3] Add MariaDB docs --- docs/ai/metadata-catalog.md | 1 + .../images/mariadb-data-source-item.jpg | Bin 0 -> 13797 bytes .../images/mariadb-data-source.jpg | Bin 0 -> 9160 bytes docs/web/adding-data-sources/mariadb.md | 201 ++++++++++++++++ docs/web/authentication.md | 1 + docs/web/custom-queries.md | 1 + docs/web/known-issues.md | 2 +- .../current.json | 4 + .../current.json | 4 + .../web/adding-data-sources/mariadb.md | 225 ++++++++++++++++++ sidebars.ts | 1 + src/components/DataSourcesTable/index.tsx | 1 + 12 files changed, 440 insertions(+), 1 deletion(-) create mode 100644 docs/web/adding-data-sources/images/mariadb-data-source-item.jpg create mode 100644 docs/web/adding-data-sources/images/mariadb-data-source.jpg create mode 100644 docs/web/adding-data-sources/mariadb.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md diff --git a/docs/ai/metadata-catalog.md b/docs/ai/metadata-catalog.md index 05c5bac3..2eba33ca 100644 --- a/docs/ai/metadata-catalog.md +++ b/docs/ai/metadata-catalog.md @@ -118,6 +118,7 @@ Common provider values: | `SQLServer` | Microsoft SQL Server | | `PostgreSQL` | PostgreSQL | | `MySQL` | MySQL | +| `MariaDB` | MariaDB | | `Oracle` | Oracle (Service Name) | | `OracleSID` | Oracle (SID) | | `SSAS` | SQL Server Analysis Services | diff --git a/docs/web/adding-data-sources/images/mariadb-data-source-item.jpg b/docs/web/adding-data-sources/images/mariadb-data-source-item.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cb98a6ffe42c656abb232ac748fa78dac334bc4 GIT binary patch literal 13797 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 literal 0 HcmV?d00001 diff --git a/docs/web/adding-data-sources/images/mariadb-data-source.jpg b/docs/web/adding-data-sources/images/mariadb-data-source.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbd55f7fcfe733de7542e29ad7908ec44c3675d7 GIT binary patch literal 9160 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 literal 0 HcmV?d00001 diff --git a/docs/web/adding-data-sources/mariadb.md b/docs/web/adding-data-sources/mariadb.md new file mode 100644 index 00000000..b0d2d58a --- /dev/null +++ b/docs/web/adding-data-sources/mariadb.md @@ -0,0 +1,201 @@ +--- +pagination_next: web/authentication +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Adding a MariaDB Data Source + +:::danger breaking changes + +Currently, the Reveal SDK is in the process of decoupling the data sources from the Reveal SDK core package. In order to ensure the project's continued functionality, you might be required to install additional packages into your project. Please see the [Supported Data Sources](web/datasources.md#supported-data-sources) topic for more information. + +::: + +## On the Client + +**Step 1** - Add an event handler for the `RevealView.onDataSourcesRequested` event. + +```js +var revealView = new $.ig.RevealView("#revealView"); +revealView.onDataSourcesRequested = (callback) => { + //add code here + callback(new $.ig.RevealDataSources([], [], false)); +}; +``` + +**Step 2** - In the `RevealView.onDataSourcesRequested` event handler, create a new instance of the `RVMariaDBDataSource` object. Set the `Host`, `Database`, `Port`, and `Title` properties to values that correspond to your MariaDB server. After you have created the `RVMariaDBDataSource` object, add it to the data sources collection. + +```js +revealView.onDataSourcesRequested = (callback) => { + var mariadbDataSource = new $.ig.RVMariaDBDataSource(); + mariadbDataSource.host = "your-db-host"; + mariadbDataSource.database = "your-db-name"; + mariadbDataSource.port = 1234; + mariadbDataSource.title = "MariaDB DS"; + + callback(new $.ig.RevealDataSources([mariadbDataSource], [], false)); +}; +``` + +When the application runs, create a new Visualization and you will see the newly created MariaDB data source listed in the "Select a Data Source" dialog. + +![](images/mariadb-data-source.jpg) + +**Step 3** - Add a new Data Source Item by creating a new instance of the `RVMariaDBDataSourceItem` object. Set the `Id`,`Title`, and `Table` properties that correspond to your database table. After you have created the `RVMariaDBDataSourceItem` object, add it to the data source items collection. + +```js +revealView.onDataSourcesRequested = (callback) => { + var mariadbDataSource = new $.ig.RVMariaDBDataSource(); + mariadbDataSource.host = "your-db-host"; + mariadbDataSource.database = "your-db-name"; + mariadbDataSource.port = 1234; + mariadbDataSource.title = "MariaDB DS"; + + var mariadbDsi = new $.ig.RVMariaDBDataSourceItem(mariadbDataSource); + mariadbDsi.id = "MyMariaDBDataSourceItem"; + mariadbDsi.title = "MariaDB DSItem"; + mariadbDsi.table = "TableName"; + + callback(new $.ig.RevealDataSources([mariadbDataSource], [mariadbDsi], false)); +}; +``` + +When the application runs, create a new Visualization and you will see the newly created MariaDB data source item listed in the "Select a Data Source" dialog. + +![](images/mariadb-data-source-item.jpg) + +## On the Server + +**Step 1** - Create the data source and data source item on the client, but do not provide any connection information. Only provide an `id`, `title`, and/or `subtitle`. + +```js +var revealView = new $.ig.RevealView("#revealView"); +revealView.onDataSourcesRequested = (callback) => { + + var mariadbDataSource = new $.ig.RVMariaDBDataSource(); + mariadbDataSource.id = "MyMariaDBDataSource"; + mariadbDataSource.title = "MariaDB DS"; + + var mariadbDataSourceItem = new $.ig.RVMariaDBDataSourceItem(mariadbDataSource); + mariadbDataSourceItem.id = "MyMariaDBDataSourceItem"; + mariadbDataSourceItem.title = "MariaDB DSItem"; + + callback(new $.ig.RevealDataSources([mariadbDataSource], [mariadbDataSourceItem], true)); +}; +``` + +**Step 2** - Create the data source provider. In this example, we are providing connection information to connect to our **MariaDB** database that was defined on the client. To achieve this, we determine the type of the data source/item we are working with, and set the available properties on the object. + + + + +```cs +public class DataSourceProvider : IRVDataSourceProvider +{ + public Task ChangeDataSourceItemAsync(IRVUserContext userContext, string dashboardId, + RVDataSourceItem dataSourceItem) + { + if (dataSourceItem is RVMariaDBDataSourceItem mariadbDataSourceItem) + { + //update underlying data source + ChangeDataSourceAsync(userContext, mariadbDataSourceItem.DataSource); + + //only change the table if we have selected our custom data source item + if (mariadbDataSourceItem.Id == "MyMariaDBDataSourceItem") + { + mariadbDataSourceItem.Table = "orders"; + } + } + + return Task.FromResult(dataSourceItem); + } + + public Task ChangeDataSourceAsync(IRVUserContext userContext, + RVDashboardDataSource dataSource) + { + if (dataSource is RVMariaDBDataSource mariadbDataSource) + { + mariadbDataSource.Host = "localhost"; + mariadbDataSource.Database = "database"; + } + + return Task.FromResult(dataSource); + } +} +``` + + + + + + + +```js +const dataSourceItemProvider = async (userContext, dataSourceItem) => { + if (dataSourceItem instanceof reveal.RVMariaDBDataSourceItem) { + + //update underlying data source + dataSourceProvider(userContext, dataSourceItem.dataSource); + + //only change the table if we have selected our data source item + if (dataSourceItem.id === "MyMariaDBDataSourceItem") { + dataSourceItem.table = "orders"; + } + } + return dataSourceItem; +} + +const dataSourceProvider = async (userContext, dataSource) => { + if (dataSource instanceof reveal.RVMariaDBDataSource) { + dataSource.host = "localhost"; + dataSource.database = "database"; + } + return dataSource; +} +``` + + + + + +```ts +const dataSourceItemProvider = async (userContext: IRVUserContext | null, dataSourceItem: RVDataSourceItem) => { + if (dataSourceItem instanceof RVMariaDBDataSourceItem) { + + //update underlying data source + dataSourceProvider(userContext, dataSourceItem.dataSource); + + //only change the table if we have selected our data source item + if (dataSourceItem.id === "MyMariaDBDataSourceItem") { + dataSourceItem.table = "orders"; + } + } + return dataSourceItem; +} + +const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => { + if (dataSource instanceof RVMariaDBDataSource) { + dataSource.host = "localhost"; + dataSource.database = "database"; + } + return dataSource; +} +``` + + + + + +:::warning Error Messages + +MariaDB is a MySQL based datasource, and it's common for drivers and error messages to reference MySQL even when connected to MariaDB. + +::: + +:::info Get the Code + +The source code to this sample can be found on [GitHub](https://github.com/RevealBi/sdk-samples-javascript/tree/main/DataSources/MariaDB). + +::: diff --git a/docs/web/authentication.md b/docs/web/authentication.md index 28d46908..5c5ee5ab 100644 --- a/docs/web/authentication.md +++ b/docs/web/authentication.md @@ -236,6 +236,7 @@ The `RVUsernamePasswordDataSourceCredential` is supported for the following data - Microsoft Dynamics CRM (On-Premises and Online) - Microsoft SQL Server - MySQL +- MariaDB - OData Services - Oracle - PostgreSQL diff --git a/docs/web/custom-queries.md b/docs/web/custom-queries.md index ce6656bf..2bb66c10 100644 --- a/docs/web/custom-queries.md +++ b/docs/web/custom-queries.md @@ -16,6 +16,7 @@ Custom Queries are supported for the following data sources: - Microsoft Azure Synapse Analytics - [Microsoft SQL Server](adding-data-sources/ms-sql-server.md) - [MySQL](adding-data-sources/mysql.md) +- [MariaDB](adding-data-sources/mariadb.md) - [Oracle](adding-data-sources/oracle.md) - [PostgreSQL](adding-data-sources/postgres.md) - [Snowflake](adding-data-sources/snowflake.md) diff --git a/docs/web/known-issues.md b/docs/web/known-issues.md index 34fd8fcd..aff69817 100644 --- a/docs/web/known-issues.md +++ b/docs/web/known-issues.md @@ -61,7 +61,7 @@ body > pre.rv-multiline-editor { ## Grid Row Paging -- Paging is supported in the following providers: SQL Server, MySQL, BigQuery, MongoDB, PostgreSQL, Snowflake, SyBase, Redshift, Databricks, Cube.dev, Athena, and Oracle. +- Paging is supported in the following providers: SQL Server, MySQL, MariaDB, BigQuery, MongoDB, PostgreSQL, Snowflake, SyBase, Redshift, Databricks, Cube.dev, Athena, and Oracle. - Providers that support stored procedures will have grid paging disabled when a stored procedure is selected as these can't be queried like tables to return a range of rows. - Paging is not available when processing data on server is false - When sorting a grid with paging enabled in regular view mode the column sorts will be applied from left to right. This means if you sort the last column and then sort the first column, they won't be applied in that order, but rather from left to right. diff --git a/i18n/en/docusaurus-plugin-content-docs/current.json b/i18n/en/docusaurus-plugin-content-docs/current.json index 814e35a9..6ef77c7a 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current.json +++ b/i18n/en/docusaurus-plugin-content-docs/current.json @@ -243,6 +243,10 @@ "message": "MySQL", "description": "The label for the doc item 'MySQL' in sidebar 'webSidebar', linking to the doc web/adding-data-sources/mysql" }, + "sidebar.webSidebar.doc.MariaDB": { + "message": "MariaDB", + "description": "The label for the doc item 'MariaDB' in sidebar 'webSidebar', linking to the doc web/adding-data-sources/mariadb" + }, "sidebar.webSidebar.doc.Custom Queries": { "message": "Custom Queries", "description": "The label for the doc item 'Custom Queries' in sidebar 'webSidebar', linking to the doc web/custom-queries" diff --git a/i18n/ja/docusaurus-plugin-content-docs/current.json b/i18n/ja/docusaurus-plugin-content-docs/current.json index 01a2447b..13265678 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current.json +++ b/i18n/ja/docusaurus-plugin-content-docs/current.json @@ -243,6 +243,10 @@ "message": "MySQL", "description": "The label for the doc item 'MySQL' in sidebar 'webSidebar', linking to the doc web/adding-data-sources/mysql" }, + "sidebar.webSidebar.doc.MariaDB": { + "message": "MariaDB", + "description": "The label for the doc item 'MariaDB' in sidebar 'webSidebar', linking to the doc web/adding-data-sources/mariadb" + }, "sidebar.webSidebar.doc.Custom Queries": { "message": "カスタム クエリ", "description": "The label for the doc item 'Custom Queries' in sidebar 'webSidebar', linking to the doc web/custom-queries" diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md b/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md new file mode 100644 index 00000000..9af0c2a9 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md @@ -0,0 +1,225 @@ +--- +pagination_next: web/authentication +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# MariaDB データ ソースの追加 + +:::danger 重大な変更 + +現在、Reveal SDK は、Reveal SDK core パッケージからデータ ソースを分離する過程にあります。プロジェクトの継続的な機能を確保するために、プロジェクトに追加のパッケージをインストールすることが必要になる場合があります。詳細については、[サポートされるデータ ソース](web/datasources.md#サポートされるデータ-ソース) トピックを参照してください。 + +::: + +## クライアント側 + +**手順 1** - `RevealView.onDataSourcesRequested` イベントのイベント ハンドラーを追加します。 + +```js +var revealView = new $.ig.RevealView("#revealView"); +revealView.onDataSourcesRequested = (callback) => { + //add code here + callback(new $.ig.RevealDataSources([], [], false)); +}; +``` + +**手順 2** - `RevealView.onDataSourcesRequested` イベント ハンドラーで、`RVMariaDBDataSource` オブジェクトの新しいインスタンスを作成します。`Host`、`Database`、`Port`、および `Title` プロパティを、MariaDB サーバーに対応する値に設定します。`RVMariaDBDataSource` オブジェクトを作成したら、それをデータ ソース コレクションに追加します。 + +```js +revealView.onDataSourcesRequested = (callback) => { + var mariadbDataSource = new $.ig.RVMariaDBDataSource(); + mariadbDataSource.host = "your-db-host"; + mariadbDataSource.database = "your-db-name"; + mariadbDataSource.port = 1234; + mariadbDataSource.title = "My MariaDB"; + + callback(new $.ig.RevealDataSources([mariadbDataSource], [], false)); +}; +``` + +アプリケーションが実行されたら、新しい可視化を作成すると、新しく作成された MariaDB データ ソースが [データ ソースの選択] ダイアログに表示されます。 + +![](images/mysql-data-source.jpg) + +**手順 3** - `RVMariaDBDataSourceItem` オブジェクトの新しいインスタンスを作成して、新しいデータ ソース項目を追加します。データベース テーブルに対応する `Id`、`Title`、および `Table` プロパティを設定します。`RVMariaDBDataSourceItem` オブジェクトを作成したら、それをデータ ソース項目コレクションに追加します。 + +```js +revealView.onDataSourcesRequested = (callback) => { + var mariadbDataSource = new $.ig.RVMariaDBDataSource(); + mariadbDataSource.host = "your-db-host"; + mariadbDataSource.database = "your-db-name"; + mariadbDataSource.port = 1234; + mariadbDataSource.title = "My MariaDB"; + + var mariadbDsi = new $.ig.RVMariaDBDataSourceItem(mariadbDataSource); + mariadbDsi.id = "MyMariaDBDataSourceItem"; + mariadbDsi.title = "My MariaDB Item"; + mariadbDsi.table = "TableName"; + + callback(new $.ig.RevealDataSources([mariadbDataSource], [mariadbDsi], false)); +}; +``` + +アプリケーションが実行されたら、新しい可視化を作成すると、新しく作成された MariaDB データ ソース項目が [データ ソースの選択] ダイアログに表示されます。 + +![](images/mysql-data-source-item.jpg) + +## サーバー側 + +**手順 1** - クライアントでデータ ソースとデータ ソース項目を作成しますが、接続情報は指定しません。`id`、`title`、および/または `subtitle` のみを入力してください。 + +```js +var revealView = new $.ig.RevealView("#revealView"); +revealView.onDataSourcesRequested = (callback) => { + + var mariadbDataSource = new $.ig.RVMariaDBDataSource(); + mariadbDataSource.id = "MyMariaDBDataSource"; + mariadbDataSource.title = "My MariaDB"; + + var mariadbDataSourceItem = new $.ig.RVMariaDBDataSourceItem(mariadbDataSource); + mariadbDataSourceItem.id = "MyMariaDBDataSourceItem"; + mariadbDataSourceItem.title = "My MariaDB Item"; + + callback(new $.ig.RevealDataSources([mariadbDataSource], [mariadbDataSourceItem], true)); +}; +``` + +**手順 2** - データ ソース プロバイダーを作成します。この例では、クライアントで定義された **MariaDB** データベースに接続するための接続情報を提供しています。これを実現するために、使用しているデータ ソース/項目のタイプを決定し、オブジェクトで使用可能なプロパティを設定します。 + + + + +```cs +public class DataSourceProvider : IRVDataSourceProvider +{ + public Task ChangeDataSourceItemAsync(IRVUserContext userContext, string dashboardId, + RVDataSourceItem dataSourceItem) + { + if (dataSourceItem is RVMariaDBDataSourceItem mariadbDataSourceItem) + { + //update underlying data source + ChangeDataSourceAsync(userContext, mariadbDataSourceItem.DataSource); + + //only change the table if we have selected our custom data source item + if (mariadbDataSourceItem.Id == "MyMariaDBDataSourceItem") + { + mariadbDataSourceItem.Table = "orders"; + } + } + + return Task.FromResult(dataSourceItem); + } + + public Task ChangeDataSourceAsync(IRVUserContext userContext, + RVDashboardDataSource dataSource) + { + if (dataSource is RVMariaDBDataSource mariadbDataSource) + { + mariadbDataSource.Host = "localhost"; + mariadbDataSource.Database = "database"; + } + + return Task.FromResult(dataSource); + } +} +``` + + + + + +```java +public class DataSourceProvider implements IRVDataSourceProvider { + public RVDataSourceItem changeDataSourceItem(IRVUserContext userContext, String dashboardsID, RVDataSourceItem dataSourceItem) { + + if (dataSourceItem instanceof RVMariaDBDataSourceItem mariadbDataSourceItem) { + + //update underlying data source + changeDataSource(userContext, dataSourceItem.getDataSource()); + + //only change the table if we have selected our custom data source item + if (Objects.equals(dataSourceItem.getId(), "MyMariaDBDataSourceItem")) { + mariadbDataSourceItem.setTable("orders"); + } + } + return dataSourceItem; + } + + public RVDashboardDataSource changeDataSource(IRVUserContext userContext, RVDashboardDataSource dataSource) { + + if (dataSource instanceof RVMariaDBDataSource mariadbDataSource) { + mariadbDataSource.setHost("localhost"); + mariadbDataSource.setDatabase("database"); + } + return dataSource; + } +} +``` + + + + + +```js +const dataSourceItemProvider = async (userContext, dataSourceItem) => { + if (dataSourceItem instanceof reveal.RVMariaDBDataSourceItem) { + + //update underlying data source + dataSourceProvider(userContext, dataSourceItem.dataSource); + + //only change the table if we have selected our data source item + if (dataSourceItem.id === "MyMariaDBDataSourceItem") { + dataSourceItem.table = "orders"; + } + } + return dataSourceItem; +} + +const dataSourceProvider = async (userContext, dataSource) => { + if (dataSource instanceof reveal.RVMariaDBDataSource) { + dataSource.host = "localhost"; + dataSource.database = "database"; + } + return dataSource; +} +``` + + + + + +```ts +const dataSourceItemProvider = async (userContext: IRVUserContext | null, dataSourceItem: RVDataSourceItem) => { + if (dataSourceItem instanceof RVMariaDBDataSourceItem) { + + //update underlying data source + dataSourceProvider(userContext, dataSourceItem.dataSource); + + //only change the table if we have selected our data source item + if (dataSourceItem.id === "MyMariaDBDataSourceItem") { + dataSourceItem.table = "orders"; + } + } + return dataSourceItem; +} + +const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => { + if (dataSource instanceof RVMariaDBDataSource) { + dataSource.host = "localhost"; + dataSource.database = "database"; + } + return dataSource; +} +``` + + + + + +:::info コードの取得 + +このサンプルのソース コードは [GitHub](https://github.com/RevealBi/sdk-samples-javascript/tree/main/DataSources/MariaDB) にあります。 + +::: diff --git a/sidebars.ts b/sidebars.ts index 63e3e6b6..c659ead8 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -93,6 +93,7 @@ const sidebars: SidebarsConfig = { { type: "doc", label: "MongoDB", id: "web/adding-data-sources/mongodb" }, { type: "doc", label: "MS SQL Server", id: "web/adding-data-sources/ms-sql-server" }, { type: "doc", label: "MySQL", id: "web/adding-data-sources/mysql" }, + { type: "doc", label: "MariaDB", id: "web/adding-data-sources/mariadb" }, { type: "doc", label: "Oracle", id: "web/adding-data-sources/oracle" }, { type: "doc", label: "PostgreSQL", id: "web/adding-data-sources/postgres" }, { type: "doc", label: "REST", id: "web/adding-data-sources/rest" }, diff --git a/src/components/DataSourcesTable/index.tsx b/src/components/DataSourcesTable/index.tsx index 8765c632..1e560182 100644 --- a/src/components/DataSourcesTable/index.tsx +++ b/src/components/DataSourcesTable/index.tsx @@ -37,6 +37,7 @@ const DataSources: DataSourceItem[] = [ { title: "Microsoft SQL Server", topic: "../adding-data-sources/ms-sql-server", nuget: "Reveal.Sdk.Data.Microsoft.SqlServer" }, { title: "MongoDB", topic: "../adding-data-sources/mongodb", nuget: "Reveal.Sdk.Data.MongoDb", maven: "" }, { title: "MySQL", topic: "../adding-data-sources/mysql", nuget: "Reveal.Sdk.Data.MySql" }, + { title: "MariaDB", topic: "../adding-data-sources/mariadb", nuget: "Reveal.Sdk.Data.MariaDB" }, { title: "OData Feed", topic: "" }, { title: "Oracle", topic: "../adding-data-sources/oracle", nuget: "Reveal.Sdk.Data.Oracle" }, { title: "PostgreSQL", topic: "../adding-data-sources/postgres", nuget: "Reveal.Sdk.Data.PostgreSQL" }, From 0b99981bb72b7e2ef0b5e8cbf18b2a07411e7892 Mon Sep 17 00:00:00 2001 From: ffranzin Date: Thu, 26 Feb 2026 16:33:46 -0300 Subject: [PATCH 2/3] apply code review and add translations --- docs/ai/metadata-catalog.md | 1 - docs/web/adding-data-sources/mariadb.md | 308 ++++++++++------ i18n/en/code.json | 99 ++---- i18n/ja/code.json | 99 +++++- .../images/mariadb-data-source-item.jpg | Bin 0 -> 13797 bytes .../images/mariadb-data-source.jpg | Bin 0 -> 9160 bytes .../web/adding-data-sources/mariadb.md | 332 +++++++++++------- sidebars.ts | 2 +- src/components/DataSourcesTable/index.tsx | 2 +- 9 files changed, 534 insertions(+), 309 deletions(-) create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/images/mariadb-data-source-item.jpg create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/images/mariadb-data-source.jpg diff --git a/docs/ai/metadata-catalog.md b/docs/ai/metadata-catalog.md index 2eba33ca..05c5bac3 100644 --- a/docs/ai/metadata-catalog.md +++ b/docs/ai/metadata-catalog.md @@ -118,7 +118,6 @@ Common provider values: | `SQLServer` | Microsoft SQL Server | | `PostgreSQL` | PostgreSQL | | `MySQL` | MySQL | -| `MariaDB` | MariaDB | | `Oracle` | Oracle (Service Name) | | `OracleSID` | Oracle (SID) | | `SSAS` | SQL Server Analysis Services | diff --git a/docs/web/adding-data-sources/mariadb.md b/docs/web/adding-data-sources/mariadb.md index b0d2d58a..bb85331d 100644 --- a/docs/web/adding-data-sources/mariadb.md +++ b/docs/web/adding-data-sources/mariadb.md @@ -5,120 +5,87 @@ pagination_next: web/authentication import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Adding a MariaDB Data Source +# MariaDB Data Source -:::danger breaking changes +## Introduction -Currently, the Reveal SDK is in the process of decoupling the data sources from the Reveal SDK core package. In order to ensure the project's continued functionality, you might be required to install additional packages into your project. Please see the [Supported Data Sources](web/datasources.md#supported-data-sources) topic for more information. +MariaDB is a community-developed, commercially supported open-source relational database that is a drop-in replacement for MySQL. This topic explains how to connect to MariaDB data sources in your Reveal application to visualize and analyze your data. +:::important Prerequisites +Before configuring the MariaDB data source in Reveal, you must have access to a MariaDB server and the appropriate database driver for your platform: +- For Windows/.NET: [MySqlConnector](https://mysqlconnector.net/) or the MySQL .NET connector. +- For Node.js: A MySQL-compatible driver (e.g. `mysql2`). + +These drivers are essential for establishing connections to your MariaDB data source. After installation, ensure the drivers are properly configured according to the connector documentation. ::: -## On the Client +## Server Configuration -**Step 1** - Add an event handler for the `RevealView.onDataSourcesRequested` event. +### Installation -```js -var revealView = new $.ig.RevealView("#revealView"); -revealView.onDataSourcesRequested = (callback) => { - //add code here - callback(new $.ig.RevealDataSources([], [], false)); -}; -``` + + -**Step 2** - In the `RevealView.onDataSourcesRequested` event handler, create a new instance of the `RVMariaDBDataSource` object. Set the `Host`, `Database`, `Port`, and `Title` properties to values that correspond to your MariaDB server. After you have created the `RVMariaDBDataSource` object, add it to the data sources collection. +**Step 1** - Install the Reveal MariaDB connector package -```js -revealView.onDataSourcesRequested = (callback) => { - var mariadbDataSource = new $.ig.RVMariaDBDataSource(); - mariadbDataSource.host = "your-db-host"; - mariadbDataSource.database = "your-db-name"; - mariadbDataSource.port = 1234; - mariadbDataSource.title = "MariaDB DS"; +For ASP.NET applications, you need to install a separate NuGet package to enable MariaDB support: - callback(new $.ig.RevealDataSources([mariadbDataSource], [], false)); -}; +```bash +dotnet add package Reveal.Sdk.Data.MariaDB ``` -When the application runs, create a new Visualization and you will see the newly created MariaDB data source listed in the "Select a Data Source" dialog. - -![](images/mariadb-data-source.jpg) - -**Step 3** - Add a new Data Source Item by creating a new instance of the `RVMariaDBDataSourceItem` object. Set the `Id`,`Title`, and `Table` properties that correspond to your database table. After you have created the `RVMariaDBDataSourceItem` object, add it to the data source items collection. +**Step 2** - Register the MariaDB data source in your application: -```js -revealView.onDataSourcesRequested = (callback) => { - var mariadbDataSource = new $.ig.RVMariaDBDataSource(); - mariadbDataSource.host = "your-db-host"; - mariadbDataSource.database = "your-db-name"; - mariadbDataSource.port = 1234; - mariadbDataSource.title = "MariaDB DS"; - - var mariadbDsi = new $.ig.RVMariaDBDataSourceItem(mariadbDataSource); - mariadbDsi.id = "MyMariaDBDataSourceItem"; - mariadbDsi.title = "MariaDB DSItem"; - mariadbDsi.table = "TableName"; - - callback(new $.ig.RevealDataSources([mariadbDataSource], [mariadbDsi], false)); -}; +```csharp +builder.Services.AddControllers().AddReveal(builder => +{ + builder.DataSources.RegisterMariaDB(); +}); ``` -When the application runs, create a new Visualization and you will see the newly created MariaDB data source item listed in the "Select a Data Source" dialog. - -![](images/mariadb-data-source-item.jpg) - -## On the Server - -**Step 1** - Create the data source and data source item on the client, but do not provide any connection information. Only provide an `id`, `title`, and/or `subtitle`. - -```js -var revealView = new $.ig.RevealView("#revealView"); -revealView.onDataSourcesRequested = (callback) => { - - var mariadbDataSource = new $.ig.RVMariaDBDataSource(); - mariadbDataSource.id = "MyMariaDBDataSource"; - mariadbDataSource.title = "MariaDB DS"; + + - var mariadbDataSourceItem = new $.ig.RVMariaDBDataSourceItem(mariadbDataSource); - mariadbDataSourceItem.id = "MyMariaDBDataSourceItem"; - mariadbDataSourceItem.title = "MariaDB DSItem"; +For Node.js applications, the MariaDB data source is already included in the main Reveal SDK package. No additional installation is required beyond the standard Reveal SDK setup. - callback(new $.ig.RevealDataSources([mariadbDataSource], [mariadbDataSourceItem], true)); -}; -``` + + + -**Step 2** - Create the data source provider. In this example, we are providing connection information to connect to our **MariaDB** database that was defined on the client. To achieve this, we determine the type of the data source/item we are working with, and set the available properties on the object. +### Connection Configuration -```cs +```csharp +// Create a data source provider public class DataSourceProvider : IRVDataSourceProvider { - public Task ChangeDataSourceItemAsync(IRVUserContext userContext, string dashboardId, - RVDataSourceItem dataSourceItem) + public async Task ChangeDataSourceItemAsync(IRVUserContext userContext, string dashboardId, RVDataSourceItem dataSourceItem) { - if (dataSourceItem is RVMariaDBDataSourceItem mariadbDataSourceItem) - { - //update underlying data source - ChangeDataSourceAsync(userContext, mariadbDataSourceItem.DataSource); + // Required: Update the underlying data source + await ChangeDataSourceAsync(userContext, dataSourceItem.DataSource); - //only change the table if we have selected our custom data source item - if (mariadbDataSourceItem.Id == "MyMariaDBDataSourceItem") + if (dataSourceItem is RVMariaDBDataSourceItem mariadbItem) + { + // Configure specific item properties as needed + if (mariadbItem.Id == "mariadb_sales_data") { - mariadbDataSourceItem.Table = "orders"; + mariadbItem.Table = "orders"; } } - return Task.FromResult(dataSourceItem); + return dataSourceItem; } - public Task ChangeDataSourceAsync(IRVUserContext userContext, - RVDashboardDataSource dataSource) + public Task ChangeDataSourceAsync(IRVUserContext userContext, RVDashboardDataSource dataSource) { - if (dataSource is RVMariaDBDataSource mariadbDataSource) + if (dataSource is RVMariaDBDataSource mariadbDS) { - mariadbDataSource.Host = "localhost"; - mariadbDataSource.Database = "database"; + // Configure connection properties + mariadbDS.Host = "localhost"; + mariadbDS.Port = 3306; + mariadbDS.Database = "your-db-name"; } return Task.FromResult(dataSource); @@ -127,59 +94,63 @@ public class DataSourceProvider : IRVDataSourceProvider ``` - - - -```js +```javascript +// Create data source providers const dataSourceItemProvider = async (userContext, dataSourceItem) => { - if (dataSourceItem instanceof reveal.RVMariaDBDataSourceItem) { - - //update underlying data source - dataSourceProvider(userContext, dataSourceItem.dataSource); + // Required: Update the underlying data source + await dataSourceProvider(userContext, dataSourceItem.dataSource); - //only change the table if we have selected our data source item - if (dataSourceItem.id === "MyMariaDBDataSourceItem") { + if (dataSourceItem instanceof reveal.RVMariaDBDataSourceItem) { + // Configure specific item properties if needed + if (dataSourceItem.id === "mariadb_sales_data") { dataSourceItem.table = "orders"; } } + return dataSourceItem; } const dataSourceProvider = async (userContext, dataSource) => { if (dataSource instanceof reveal.RVMariaDBDataSource) { + // Configure connection properties dataSource.host = "localhost"; - dataSource.database = "database"; + dataSource.port = 3306; + dataSource.database = "your-db-name"; } + return dataSource; } ``` + - - -```ts +```typescript +// Create data source providers const dataSourceItemProvider = async (userContext: IRVUserContext | null, dataSourceItem: RVDataSourceItem) => { - if (dataSourceItem instanceof RVMariaDBDataSourceItem) { + // Required: Update the underlying data source + await dataSourceProvider(userContext, dataSourceItem.dataSource); - //update underlying data source - dataSourceProvider(userContext, dataSourceItem.dataSource); - - //only change the table if we have selected our data source item - if (dataSourceItem.id === "MyMariaDBDataSourceItem") { + if (dataSourceItem instanceof RVMariaDBDataSourceItem) { + // Configure specific item properties if needed + if (dataSourceItem.id === "mariadb_sales_data") { dataSourceItem.table = "orders"; } } + return dataSourceItem; } const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => { if (dataSource instanceof RVMariaDBDataSource) { + // Configure connection properties dataSource.host = "localhost"; - dataSource.database = "database"; + dataSource.port = 3306; + dataSource.database = "your-db-name"; } + return dataSource; } ``` @@ -188,14 +159,139 @@ const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource -:::warning Error Messages +:::danger Important +Any changes made to the data source in the `ChangeDataSourceAsync` method are not carried over into the `ChangeDataSourceItemAsync` method. You **must** update the data source properties in both methods. We recommend calling the `ChangeDataSourceAsync` method within the `ChangeDataSourceItemAsync` method passing the data source item's underlying data source as the parameter as shown in the examples above. +::: -MariaDB is a MySQL based datasource, and it's common for drivers and error messages to reference MySQL even when connected to MariaDB. +### Authentication -::: +Authentication for MariaDB is typically handled with username and password. For detailed information on authentication options, see the [Authentication](web/authentication.md) topic. -:::info Get the Code + + -The source code to this sample can be found on [GitHub](https://github.com/RevealBi/sdk-samples-javascript/tree/main/DataSources/MariaDB). +```csharp +public class AuthenticationProvider : IRVAuthenticationProvider +{ + public Task ResolveCredentialsAsync(IRVUserContext userContext, RVDashboardDataSource dataSource) + { + IRVDataSourceCredential userCredential = null; + if (dataSource is RVMariaDBDataSource) + { + userCredential = new RVUsernamePasswordDataSourceCredential("your_username", "your_password"); + } + return Task.FromResult(userCredential); + } +} +``` + + + +```javascript +const authenticationProvider = async (userContext, dataSource) => { + if (dataSource instanceof reveal.RVMariaDBDataSource) { + return new reveal.RVUsernamePasswordDataSourceCredential("your_username", "your_password"); + } + return null; +} +``` + + + + +```ts +const authenticationProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => { + if (dataSource instanceof RVMariaDBDataSource) { + return new RVUsernamePasswordDataSourceCredential("your_username", "your_password"); + } + return null; +} +``` + + + + + +## Client-Side Implementation + +On the client side, you only need to specify basic properties like ID, title, and subtitle for the data source. The actual connection configuration happens on the server. + +### Creating Data Sources + +**Step 1** - Add an event handler for the `RevealView.onDataSourcesRequested` event. + +```js +const revealView = new $.ig.RevealView("#revealView"); +revealView.onDataSourcesRequested = (callback) => { + // Add data source here + callback(new $.ig.RevealDataSources([], [], false)); +}; +``` + +**Step 2** - In the `RevealView.onDataSourcesRequested` event handler, create a new instance of the `RVMariaDBDataSource` object. Set the `title` and `subtitle` properties. After you have created the `RVMariaDBDataSource` object, add it to the data sources collection. + +```js +revealView.onDataSourcesRequested = (callback) => { + const mariadbDS = new $.ig.RVMariaDBDataSource(); + mariadbDS.title = "MariaDB"; + mariadbDS.subtitle = "Data Source"; + + callback(new $.ig.RevealDataSources([mariadbDS], [], false)); +}; +``` + +When the application runs, create a new Visualization and you will see the newly created MariaDB data source listed in the "Select a Data Source" dialog. + +![](images/mariadb-data-source.jpg) + +### Creating Data Source Items + +Data source items represent specific tables or datasets within your MariaDB data source that users can select for visualization. On the client side, you only need to specify ID, title, and subtitle. + +```js +revealView.onDataSourcesRequested = (callback) => { + // Create the data source + const mariadbDS = new $.ig.RVMariaDBDataSource(); + mariadbDS.title = "My MariaDB Datasource"; + mariadbDS.subtitle = "MariaDB"; + + // Create a data source item + const mariadbDSI = new $.ig.RVMariaDBDataSourceItem(mariadbDS); + mariadbDSI.id = "mariadb_sales_data"; + mariadbDSI.title = "My MariaDB Datasource Item"; + mariadbDSI.subtitle = "MariaDB"; + + callback(new $.ig.RevealDataSources([mariadbDS], [mariadbDSI], true)); +}; +``` + +When the application runs, create a new Visualization and you will see the newly created MariaDB data source item listed in the "Select a Data Source" dialog. + +![](images/mariadb-data-source-item.jpg) + +:::warning Error Messages +MariaDB is MySQL-compatible, and it is common for drivers and error messages to reference MySQL even when connected to MariaDB. ::: + +## Additional Resources + +- [MariaDB Documentation](https://mariadb.com/kb/en/documentation/) +- [Sample Source Code on GitHub](https://github.com/RevealBi/sdk-samples-javascript/tree/main/DataSources/MariaDB) + +## API Reference + + + + +* [RVMariaDBDataSource](https://help.revealbi.io/api/aspnet/latest/Reveal.Sdk.Data.MariaDB.RVMariaDBDataSource.html) - Represents a MariaDB data source +* [RVMariaDBDataSourceItem](https://help.revealbi.io/api/aspnet/latest/Reveal.Sdk.Data.MariaDB.RVMariaDBDataSourceItem.html) - Represents a MariaDB data source item + + + + +* [RVMariaDBDataSource](https://help.revealbi.io/api/javascript/latest/classes/rvmariadbdatasource.html) - Represents a MariaDB data source +* [RVMariaDBDataSourceItem](https://help.revealbi.io/api/javascript/latest/classes/rvmariadbdatasourceitem.html) - Represents a MariaDB data source item + + + diff --git a/i18n/en/code.json b/i18n/en/code.json index 56409f99..953ea4a5 100644 --- a/i18n/en/code.json +++ b/i18n/en/code.json @@ -1,135 +1,102 @@ { "homepage.hero.title": { - "message": "Build Intelligent Analytics Into Your Apps", - "description": "The title of the hero section on the homepage" + "message": "Build Intelligent Analytics Into Your Apps" }, "homepage.hero.subtitle": { - "message": "Embed interactive dashboards, AI-powered insights, and conversational data exploration into any web application.", - "description": "The subtitle of the hero section on the homepage" + "message": "Embed interactive dashboards, AI-powered insights, and conversational data exploration into any web application." }, "homepage.hero.cta.getStarted": { - "message": "Get Started", - "description": "The primary CTA button on the homepage hero" + "message": "Get Started" }, "homepage.hero.cta.exploreAi": { - "message": "Explore AI SDK", - "description": "The secondary CTA button on the homepage hero" + "message": "Explore AI SDK" }, "homepage.ai.badge": { - "message": "NEW", - "description": "The badge label for the AI spotlight section" + "message": "NEW" }, "homepage.ai.title": { - "message": "AI-Powered Analytics", - "description": "The title of the AI spotlight section" + "message": "AI-Powered Analytics" }, "homepage.ai.description": { - "message": "Generate dashboards from natural language, get AI insights from your data, and build conversational analytics — all with a few lines of code.", - "description": "The description in the AI spotlight section" + "message": "Generate dashboards from natural language, get AI insights from your data, and build conversational analytics — all with a few lines of code." }, "homepage.ai.capability1": { - "message": "Natural Language Dashboards", - "description": "AI capability chip 1" + "message": "Natural Language Dashboards" }, "homepage.ai.capability2": { - "message": "AI Insights & Forecasts", - "description": "AI capability chip 2" + "message": "AI Insights & Forecasts" }, "homepage.ai.capability3": { - "message": "Conversational Chat", - "description": "AI capability chip 3" + "message": "Conversational Chat" }, "homepage.ai.cta": { - "message": "Start building with AI", - "description": "The CTA link in the AI spotlight section" + "message": "Start building with AI" }, "homepage.sdk.web.title": { - "message": "Web SDK", - "description": "The title of the Web SDK card" + "message": "Web SDK" }, "homepage.sdk.web.subtitle": { - "message": "Embedded Analytics", - "description": "The subtitle of the Web SDK card" + "message": "Embedded Analytics" }, "homepage.sdk.web.description": { - "message": "Embed interactive dashboards and data visualizations into any web application. Supports 30+ data sources with full customization.", - "description": "The description of the Web SDK card" + "message": "Embed interactive dashboards and data visualizations into any web application. Supports 30+ data sources with full customization." }, "homepage.sdk.web.link.getStarted": { - "message": "Getting Started", - "description": "Web SDK quick link" + "message": "Getting Started" }, "homepage.sdk.web.link.dataSources": { - "message": "Data Sources", - "description": "Web SDK quick link" + "message": "Data Sources" }, "homepage.sdk.web.link.apiRef": { - "message": "API Reference", - "description": "Web SDK quick link" + "message": "API Reference" }, "homepage.sdk.web.link.playground": { - "message": "Developer Playground", - "description": "Web SDK quick link" + "message": "Developer Playground" }, "homepage.sdk.ai.title": { - "message": "AI SDK", - "description": "The title of the AI SDK card" + "message": "AI SDK" }, "homepage.sdk.ai.subtitle": { - "message": "Intelligent Analytics", - "description": "The subtitle of the AI SDK card" + "message": "Intelligent Analytics" }, "homepage.sdk.ai.description": { - "message": "Add AI-powered insights, natural language dashboards, and conversational analytics using LLMs like OpenAI, Anthropic, and Google.", - "description": "The description of the AI SDK card" + "message": "Add AI-powered insights, natural language dashboards, and conversational analytics using LLMs like OpenAI, Anthropic, and Google." }, "homepage.sdk.ai.link.overview": { - "message": "Overview", - "description": "AI SDK quick link" + "message": "Overview" }, "homepage.sdk.ai.link.getStarted": { - "message": "Getting Started", - "description": "AI SDK quick link" + "message": "Getting Started" }, "homepage.sdk.ai.link.insights": { - "message": "Insights API", - "description": "AI SDK quick link" + "message": "Insights API" }, "homepage.sdk.ai.link.chat": { - "message": "Chat API", - "description": "AI SDK quick link" + "message": "Chat API" }, "homepage.frameworks.title": { - "message": "Choose Your Stack", - "description": "The title of the framework picker section" + "message": "Choose Your Stack" }, "homepage.frameworks.subtitle": { - "message": "Step-by-step getting started guides for your preferred framework.", - "description": "The subtitle of the framework picker section" + "message": "Step-by-step getting started guides for your preferred framework." }, "homepage.frameworks.html": { - "message": "HTML / JavaScript", - "description": "Framework picker label" + "message": "HTML / JavaScript" }, "homepage.frameworks.react": { - "message": "React", - "description": "Framework picker label" + "message": "React" }, "homepage.frameworks.angular": { - "message": "Angular", - "description": "Framework picker label" + "message": "Angular" }, "homepage.frameworks.aspnet": { - "message": "ASP.NET", - "description": "Framework picker label" + "message": "ASP.NET" }, "homepage.frameworks.node": { - "message": "Node.js", - "description": "Framework picker label" + "message": "Node.js" }, "homepage.frameworks.springboot": { - "message": "Spring Boot", - "description": "Framework picker label" + "message": "Spring Boot" }, "theme.ErrorPageContent.title": { "message": "This page crashed.", diff --git a/i18n/ja/code.json b/i18n/ja/code.json index f7a82d20..0fc5f09d 100644 --- a/i18n/ja/code.json +++ b/i18n/ja/code.json @@ -1,11 +1,9 @@ { "homepage.hero.title": { - "message": "Reveal は初めてですか? 私たちにお任せください!", - "description": "The title of the hero section on the homepage" + "message": "Reveal は初めてですか? 私たちにお任せください!" }, "homepage.hero.subtitle": { - "message": "統合、データ可視化のデザイン、ダッシュボードの作成などに関するヘルプを入手してください。", - "description": "The subtitle of the hero section on the homepage" + "message": "統合、データ可視化のデザイン、ダッシュボードの作成などに関するヘルプを入手してください。" }, "theme.ErrorPageContent.title": { "message": "エラーが発生しました", @@ -642,5 +640,98 @@ "theme.SearchModal.footer.backToSearchText": { "message": "検索に戻る", "description": "The back to search text for footer" + }, + "homepage.hero.cta.getStarted": { + "message": "Get Started" + }, + "homepage.hero.cta.exploreAi": { + "message": "Explore AI SDK" + }, + "homepage.ai.badge": { + "message": "NEW" + }, + "homepage.ai.title": { + "message": "AI-Powered Analytics" + }, + "homepage.ai.description": { + "message": "Generate dashboards from natural language, get AI insights from your data, and build conversational analytics — all with a few lines of code." + }, + "homepage.ai.capability1": { + "message": "Natural Language Dashboards" + }, + "homepage.ai.capability2": { + "message": "AI Insights & Forecasts" + }, + "homepage.ai.capability3": { + "message": "Conversational Chat" + }, + "homepage.ai.cta": { + "message": "Start building with AI" + }, + "homepage.frameworks.html": { + "message": "HTML / JavaScript" + }, + "homepage.frameworks.react": { + "message": "React" + }, + "homepage.frameworks.angular": { + "message": "Angular" + }, + "homepage.frameworks.aspnet": { + "message": "ASP.NET" + }, + "homepage.frameworks.node": { + "message": "Node.js" + }, + "homepage.frameworks.springboot": { + "message": "Spring Boot" + }, + "homepage.frameworks.title": { + "message": "Choose Your Stack" + }, + "homepage.frameworks.subtitle": { + "message": "Step-by-step getting started guides for your preferred framework." + }, + "homepage.sdk.web.link.getStarted": { + "message": "Getting Started" + }, + "homepage.sdk.web.link.dataSources": { + "message": "Data Sources" + }, + "homepage.sdk.web.link.apiRef": { + "message": "API Reference" + }, + "homepage.sdk.web.link.playground": { + "message": "Developer Playground" + }, + "homepage.sdk.ai.link.overview": { + "message": "Overview" + }, + "homepage.sdk.ai.link.getStarted": { + "message": "Getting Started" + }, + "homepage.sdk.ai.link.insights": { + "message": "Insights API" + }, + "homepage.sdk.ai.link.chat": { + "message": "Chat API" + }, + "homepage.sdk.web.title": { + "message": "Web SDK" + }, + "homepage.sdk.web.subtitle": { + "message": "Embedded Analytics" + }, + "homepage.sdk.web.description": { + "message": "Embed interactive dashboards and data visualizations into any web application. Supports 30+ data sources with full customization." + }, + "homepage.sdk.ai.title": { + "message": "AI SDK" + }, + "homepage.sdk.ai.subtitle": { + "message": "Intelligent Analytics" + }, + "homepage.sdk.ai.description": { + "message": "Add AI-powered insights, natural language dashboards, and conversational analytics using LLMs like OpenAI, Anthropic, and Google." } } diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/images/mariadb-data-source-item.jpg b/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/images/mariadb-data-source-item.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cb98a6ffe42c656abb232ac748fa78dac334bc4 GIT binary patch literal 13797 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/images/mariadb-data-source.jpg b/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/images/mariadb-data-source.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbd55f7fcfe733de7542e29ad7908ec44c3675d7 GIT binary patch literal 9160 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md b/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md index 9af0c2a9..bb85331d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md @@ -5,120 +5,87 @@ pagination_next: web/authentication import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# MariaDB データ ソースの追加 +# MariaDB Data Source -:::danger 重大な変更 +## Introduction -現在、Reveal SDK は、Reveal SDK core パッケージからデータ ソースを分離する過程にあります。プロジェクトの継続的な機能を確保するために、プロジェクトに追加のパッケージをインストールすることが必要になる場合があります。詳細については、[サポートされるデータ ソース](web/datasources.md#サポートされるデータ-ソース) トピックを参照してください。 +MariaDB is a community-developed, commercially supported open-source relational database that is a drop-in replacement for MySQL. This topic explains how to connect to MariaDB data sources in your Reveal application to visualize and analyze your data. +:::important Prerequisites +Before configuring the MariaDB data source in Reveal, you must have access to a MariaDB server and the appropriate database driver for your platform: +- For Windows/.NET: [MySqlConnector](https://mysqlconnector.net/) or the MySQL .NET connector. +- For Node.js: A MySQL-compatible driver (e.g. `mysql2`). + +These drivers are essential for establishing connections to your MariaDB data source. After installation, ensure the drivers are properly configured according to the connector documentation. ::: -## クライアント側 +## Server Configuration -**手順 1** - `RevealView.onDataSourcesRequested` イベントのイベント ハンドラーを追加します。 +### Installation -```js -var revealView = new $.ig.RevealView("#revealView"); -revealView.onDataSourcesRequested = (callback) => { - //add code here - callback(new $.ig.RevealDataSources([], [], false)); -}; -``` + + -**手順 2** - `RevealView.onDataSourcesRequested` イベント ハンドラーで、`RVMariaDBDataSource` オブジェクトの新しいインスタンスを作成します。`Host`、`Database`、`Port`、および `Title` プロパティを、MariaDB サーバーに対応する値に設定します。`RVMariaDBDataSource` オブジェクトを作成したら、それをデータ ソース コレクションに追加します。 +**Step 1** - Install the Reveal MariaDB connector package -```js -revealView.onDataSourcesRequested = (callback) => { - var mariadbDataSource = new $.ig.RVMariaDBDataSource(); - mariadbDataSource.host = "your-db-host"; - mariadbDataSource.database = "your-db-name"; - mariadbDataSource.port = 1234; - mariadbDataSource.title = "My MariaDB"; +For ASP.NET applications, you need to install a separate NuGet package to enable MariaDB support: - callback(new $.ig.RevealDataSources([mariadbDataSource], [], false)); -}; +```bash +dotnet add package Reveal.Sdk.Data.MariaDB ``` -アプリケーションが実行されたら、新しい可視化を作成すると、新しく作成された MariaDB データ ソースが [データ ソースの選択] ダイアログに表示されます。 - -![](images/mysql-data-source.jpg) - -**手順 3** - `RVMariaDBDataSourceItem` オブジェクトの新しいインスタンスを作成して、新しいデータ ソース項目を追加します。データベース テーブルに対応する `Id`、`Title`、および `Table` プロパティを設定します。`RVMariaDBDataSourceItem` オブジェクトを作成したら、それをデータ ソース項目コレクションに追加します。 +**Step 2** - Register the MariaDB data source in your application: -```js -revealView.onDataSourcesRequested = (callback) => { - var mariadbDataSource = new $.ig.RVMariaDBDataSource(); - mariadbDataSource.host = "your-db-host"; - mariadbDataSource.database = "your-db-name"; - mariadbDataSource.port = 1234; - mariadbDataSource.title = "My MariaDB"; - - var mariadbDsi = new $.ig.RVMariaDBDataSourceItem(mariadbDataSource); - mariadbDsi.id = "MyMariaDBDataSourceItem"; - mariadbDsi.title = "My MariaDB Item"; - mariadbDsi.table = "TableName"; - - callback(new $.ig.RevealDataSources([mariadbDataSource], [mariadbDsi], false)); -}; +```csharp +builder.Services.AddControllers().AddReveal(builder => +{ + builder.DataSources.RegisterMariaDB(); +}); ``` -アプリケーションが実行されたら、新しい可視化を作成すると、新しく作成された MariaDB データ ソース項目が [データ ソースの選択] ダイアログに表示されます。 - -![](images/mysql-data-source-item.jpg) - -## サーバー側 - -**手順 1** - クライアントでデータ ソースとデータ ソース項目を作成しますが、接続情報は指定しません。`id`、`title`、および/または `subtitle` のみを入力してください。 - -```js -var revealView = new $.ig.RevealView("#revealView"); -revealView.onDataSourcesRequested = (callback) => { - - var mariadbDataSource = new $.ig.RVMariaDBDataSource(); - mariadbDataSource.id = "MyMariaDBDataSource"; - mariadbDataSource.title = "My MariaDB"; + + - var mariadbDataSourceItem = new $.ig.RVMariaDBDataSourceItem(mariadbDataSource); - mariadbDataSourceItem.id = "MyMariaDBDataSourceItem"; - mariadbDataSourceItem.title = "My MariaDB Item"; +For Node.js applications, the MariaDB data source is already included in the main Reveal SDK package. No additional installation is required beyond the standard Reveal SDK setup. - callback(new $.ig.RevealDataSources([mariadbDataSource], [mariadbDataSourceItem], true)); -}; -``` + + + -**手順 2** - データ ソース プロバイダーを作成します。この例では、クライアントで定義された **MariaDB** データベースに接続するための接続情報を提供しています。これを実現するために、使用しているデータ ソース/項目のタイプを決定し、オブジェクトで使用可能なプロパティを設定します。 +### Connection Configuration -```cs +```csharp +// Create a data source provider public class DataSourceProvider : IRVDataSourceProvider { - public Task ChangeDataSourceItemAsync(IRVUserContext userContext, string dashboardId, - RVDataSourceItem dataSourceItem) + public async Task ChangeDataSourceItemAsync(IRVUserContext userContext, string dashboardId, RVDataSourceItem dataSourceItem) { - if (dataSourceItem is RVMariaDBDataSourceItem mariadbDataSourceItem) - { - //update underlying data source - ChangeDataSourceAsync(userContext, mariadbDataSourceItem.DataSource); + // Required: Update the underlying data source + await ChangeDataSourceAsync(userContext, dataSourceItem.DataSource); - //only change the table if we have selected our custom data source item - if (mariadbDataSourceItem.Id == "MyMariaDBDataSourceItem") + if (dataSourceItem is RVMariaDBDataSourceItem mariadbItem) + { + // Configure specific item properties as needed + if (mariadbItem.Id == "mariadb_sales_data") { - mariadbDataSourceItem.Table = "orders"; + mariadbItem.Table = "orders"; } } - return Task.FromResult(dataSourceItem); + return dataSourceItem; } - public Task ChangeDataSourceAsync(IRVUserContext userContext, - RVDashboardDataSource dataSource) + public Task ChangeDataSourceAsync(IRVUserContext userContext, RVDashboardDataSource dataSource) { - if (dataSource is RVMariaDBDataSource mariadbDataSource) + if (dataSource is RVMariaDBDataSource mariadbDS) { - mariadbDataSource.Host = "localhost"; - mariadbDataSource.Database = "database"; + // Configure connection properties + mariadbDS.Host = "localhost"; + mariadbDS.Port = 3306; + mariadbDS.Database = "your-db-name"; } return Task.FromResult(dataSource); @@ -127,90 +94,118 @@ public class DataSourceProvider : IRVDataSourceProvider ``` + - - -```java -public class DataSourceProvider implements IRVDataSourceProvider { - public RVDataSourceItem changeDataSourceItem(IRVUserContext userContext, String dashboardsID, RVDataSourceItem dataSourceItem) { - - if (dataSourceItem instanceof RVMariaDBDataSourceItem mariadbDataSourceItem) { - - //update underlying data source - changeDataSource(userContext, dataSourceItem.getDataSource()); +```javascript +// Create data source providers +const dataSourceItemProvider = async (userContext, dataSourceItem) => { + // Required: Update the underlying data source + await dataSourceProvider(userContext, dataSourceItem.dataSource); - //only change the table if we have selected our custom data source item - if (Objects.equals(dataSourceItem.getId(), "MyMariaDBDataSourceItem")) { - mariadbDataSourceItem.setTable("orders"); - } + if (dataSourceItem instanceof reveal.RVMariaDBDataSourceItem) { + // Configure specific item properties if needed + if (dataSourceItem.id === "mariadb_sales_data") { + dataSourceItem.table = "orders"; } - return dataSourceItem; } - public RVDashboardDataSource changeDataSource(IRVUserContext userContext, RVDashboardDataSource dataSource) { + return dataSourceItem; +} - if (dataSource instanceof RVMariaDBDataSource mariadbDataSource) { - mariadbDataSource.setHost("localhost"); - mariadbDataSource.setDatabase("database"); - } - return dataSource; +const dataSourceProvider = async (userContext, dataSource) => { + if (dataSource instanceof reveal.RVMariaDBDataSource) { + // Configure connection properties + dataSource.host = "localhost"; + dataSource.port = 3306; + dataSource.database = "your-db-name"; } + + return dataSource; } ``` + - - -```js -const dataSourceItemProvider = async (userContext, dataSourceItem) => { - if (dataSourceItem instanceof reveal.RVMariaDBDataSourceItem) { - - //update underlying data source - dataSourceProvider(userContext, dataSourceItem.dataSource); +```typescript +// Create data source providers +const dataSourceItemProvider = async (userContext: IRVUserContext | null, dataSourceItem: RVDataSourceItem) => { + // Required: Update the underlying data source + await dataSourceProvider(userContext, dataSourceItem.dataSource); - //only change the table if we have selected our data source item - if (dataSourceItem.id === "MyMariaDBDataSourceItem") { + if (dataSourceItem instanceof RVMariaDBDataSourceItem) { + // Configure specific item properties if needed + if (dataSourceItem.id === "mariadb_sales_data") { dataSourceItem.table = "orders"; } } + return dataSourceItem; } -const dataSourceProvider = async (userContext, dataSource) => { - if (dataSource instanceof reveal.RVMariaDBDataSource) { +const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => { + if (dataSource instanceof RVMariaDBDataSource) { + // Configure connection properties dataSource.host = "localhost"; - dataSource.database = "database"; + dataSource.port = 3306; + dataSource.database = "your-db-name"; } + return dataSource; } ``` - + -```ts -const dataSourceItemProvider = async (userContext: IRVUserContext | null, dataSourceItem: RVDataSourceItem) => { - if (dataSourceItem instanceof RVMariaDBDataSourceItem) { +:::danger Important +Any changes made to the data source in the `ChangeDataSourceAsync` method are not carried over into the `ChangeDataSourceItemAsync` method. You **must** update the data source properties in both methods. We recommend calling the `ChangeDataSourceAsync` method within the `ChangeDataSourceItemAsync` method passing the data source item's underlying data source as the parameter as shown in the examples above. +::: - //update underlying data source - dataSourceProvider(userContext, dataSourceItem.dataSource); +### Authentication - //only change the table if we have selected our data source item - if (dataSourceItem.id === "MyMariaDBDataSourceItem") { - dataSourceItem.table = "orders"; +Authentication for MariaDB is typically handled with username and password. For detailed information on authentication options, see the [Authentication](web/authentication.md) topic. + + + + +```csharp +public class AuthenticationProvider : IRVAuthenticationProvider +{ + public Task ResolveCredentialsAsync(IRVUserContext userContext, RVDashboardDataSource dataSource) + { + IRVDataSourceCredential userCredential = null; + if (dataSource is RVMariaDBDataSource) + { + userCredential = new RVUsernamePasswordDataSourceCredential("your_username", "your_password"); } + return Task.FromResult(userCredential); } - return dataSourceItem; } +``` -const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => { + + + +```javascript +const authenticationProvider = async (userContext, dataSource) => { + if (dataSource instanceof reveal.RVMariaDBDataSource) { + return new reveal.RVUsernamePasswordDataSourceCredential("your_username", "your_password"); + } + return null; +} +``` + + + + +```ts +const authenticationProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => { if (dataSource instanceof RVMariaDBDataSource) { - dataSource.host = "localhost"; - dataSource.database = "database"; + return new RVUsernamePasswordDataSourceCredential("your_username", "your_password"); } - return dataSource; + return null; } ``` @@ -218,8 +213,85 @@ const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource -:::info コードの取得 +## Client-Side Implementation + +On the client side, you only need to specify basic properties like ID, title, and subtitle for the data source. The actual connection configuration happens on the server. + +### Creating Data Sources + +**Step 1** - Add an event handler for the `RevealView.onDataSourcesRequested` event. + +```js +const revealView = new $.ig.RevealView("#revealView"); +revealView.onDataSourcesRequested = (callback) => { + // Add data source here + callback(new $.ig.RevealDataSources([], [], false)); +}; +``` + +**Step 2** - In the `RevealView.onDataSourcesRequested` event handler, create a new instance of the `RVMariaDBDataSource` object. Set the `title` and `subtitle` properties. After you have created the `RVMariaDBDataSource` object, add it to the data sources collection. + +```js +revealView.onDataSourcesRequested = (callback) => { + const mariadbDS = new $.ig.RVMariaDBDataSource(); + mariadbDS.title = "MariaDB"; + mariadbDS.subtitle = "Data Source"; + + callback(new $.ig.RevealDataSources([mariadbDS], [], false)); +}; +``` + +When the application runs, create a new Visualization and you will see the newly created MariaDB data source listed in the "Select a Data Source" dialog. + +![](images/mariadb-data-source.jpg) + +### Creating Data Source Items + +Data source items represent specific tables or datasets within your MariaDB data source that users can select for visualization. On the client side, you only need to specify ID, title, and subtitle. -このサンプルのソース コードは [GitHub](https://github.com/RevealBi/sdk-samples-javascript/tree/main/DataSources/MariaDB) にあります。 +```js +revealView.onDataSourcesRequested = (callback) => { + // Create the data source + const mariadbDS = new $.ig.RVMariaDBDataSource(); + mariadbDS.title = "My MariaDB Datasource"; + mariadbDS.subtitle = "MariaDB"; + + // Create a data source item + const mariadbDSI = new $.ig.RVMariaDBDataSourceItem(mariadbDS); + mariadbDSI.id = "mariadb_sales_data"; + mariadbDSI.title = "My MariaDB Datasource Item"; + mariadbDSI.subtitle = "MariaDB"; + + callback(new $.ig.RevealDataSources([mariadbDS], [mariadbDSI], true)); +}; +``` +When the application runs, create a new Visualization and you will see the newly created MariaDB data source item listed in the "Select a Data Source" dialog. + +![](images/mariadb-data-source-item.jpg) + +:::warning Error Messages +MariaDB is MySQL-compatible, and it is common for drivers and error messages to reference MySQL even when connected to MariaDB. ::: + +## Additional Resources + +- [MariaDB Documentation](https://mariadb.com/kb/en/documentation/) +- [Sample Source Code on GitHub](https://github.com/RevealBi/sdk-samples-javascript/tree/main/DataSources/MariaDB) + +## API Reference + + + + +* [RVMariaDBDataSource](https://help.revealbi.io/api/aspnet/latest/Reveal.Sdk.Data.MariaDB.RVMariaDBDataSource.html) - Represents a MariaDB data source +* [RVMariaDBDataSourceItem](https://help.revealbi.io/api/aspnet/latest/Reveal.Sdk.Data.MariaDB.RVMariaDBDataSourceItem.html) - Represents a MariaDB data source item + + + + +* [RVMariaDBDataSource](https://help.revealbi.io/api/javascript/latest/classes/rvmariadbdatasource.html) - Represents a MariaDB data source +* [RVMariaDBDataSourceItem](https://help.revealbi.io/api/javascript/latest/classes/rvmariadbdatasourceitem.html) - Represents a MariaDB data source item + + + diff --git a/sidebars.ts b/sidebars.ts index c659ead8..e6874abc 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -90,10 +90,10 @@ const sidebars: SidebarsConfig = { { type: "doc", label: "Google Sheets", id: "web/adding-data-sources/google-sheets" }, { type: "doc", label: "In Memory Data", id: "web/adding-data-sources/in-memory-data" }, { type: "doc", label: "JSON", id: "web/adding-data-sources/json" }, + { type: "doc", label: "MariaDB", id: "web/adding-data-sources/mariadb" }, { type: "doc", label: "MongoDB", id: "web/adding-data-sources/mongodb" }, { type: "doc", label: "MS SQL Server", id: "web/adding-data-sources/ms-sql-server" }, { type: "doc", label: "MySQL", id: "web/adding-data-sources/mysql" }, - { type: "doc", label: "MariaDB", id: "web/adding-data-sources/mariadb" }, { type: "doc", label: "Oracle", id: "web/adding-data-sources/oracle" }, { type: "doc", label: "PostgreSQL", id: "web/adding-data-sources/postgres" }, { type: "doc", label: "REST", id: "web/adding-data-sources/rest" }, diff --git a/src/components/DataSourcesTable/index.tsx b/src/components/DataSourcesTable/index.tsx index 1e560182..325143a6 100644 --- a/src/components/DataSourcesTable/index.tsx +++ b/src/components/DataSourcesTable/index.tsx @@ -25,6 +25,7 @@ const DataSources: DataSourceItem[] = [ { title: "In-Memory Data", topic: "../adding-data-sources/in-memory-data" }, { title: "JSON", topic: "../adding-data-sources/json" }, // { title: "Marketo", topic: "", nuget: "Reveal.Sdk.Data.Marketo" }, do not advertise + { title: "MariaDB", topic: "../adding-data-sources/mariadb", nuget: "Reveal.Sdk.Data.MariaDB" }, { title: "Microsoft Analysis Services", topic: "", nuget: "Reveal.Sdk.Data.Microsoft.AnalysisServices" }, { title: "Microsoft Azure Analysis Services", topic: "", nuget: "Reveal.Sdk.Data.Microsoft.AnalysisServices" }, { title: "Microsoft Azure SQL Database", topic: "", nuget: "Reveal.Sdk.Data.Microsoft.SqlServer" }, @@ -37,7 +38,6 @@ const DataSources: DataSourceItem[] = [ { title: "Microsoft SQL Server", topic: "../adding-data-sources/ms-sql-server", nuget: "Reveal.Sdk.Data.Microsoft.SqlServer" }, { title: "MongoDB", topic: "../adding-data-sources/mongodb", nuget: "Reveal.Sdk.Data.MongoDb", maven: "" }, { title: "MySQL", topic: "../adding-data-sources/mysql", nuget: "Reveal.Sdk.Data.MySql" }, - { title: "MariaDB", topic: "../adding-data-sources/mariadb", nuget: "Reveal.Sdk.Data.MariaDB" }, { title: "OData Feed", topic: "" }, { title: "Oracle", topic: "../adding-data-sources/oracle", nuget: "Reveal.Sdk.Data.Oracle" }, { title: "PostgreSQL", topic: "../adding-data-sources/postgres", nuget: "Reveal.Sdk.Data.PostgreSQL" }, From 8f77851ea1ef5862a0ee9486556b581cefcd3ce6 Mon Sep 17 00:00:00 2001 From: ffranzin Date: Fri, 27 Feb 2026 11:15:10 -0300 Subject: [PATCH 3/3] apply suggestions and revert changes --- docs/web/adding-data-sources/mariadb.md | 7 -- i18n/en/code.json | 99 ++++++++++++------- .../web/adding-data-sources/mariadb.md | 7 -- 3 files changed, 66 insertions(+), 47 deletions(-) diff --git a/docs/web/adding-data-sources/mariadb.md b/docs/web/adding-data-sources/mariadb.md index bb85331d..e92c2c6a 100644 --- a/docs/web/adding-data-sources/mariadb.md +++ b/docs/web/adding-data-sources/mariadb.md @@ -11,13 +11,6 @@ import TabItem from '@theme/TabItem'; MariaDB is a community-developed, commercially supported open-source relational database that is a drop-in replacement for MySQL. This topic explains how to connect to MariaDB data sources in your Reveal application to visualize and analyze your data. -:::important Prerequisites -Before configuring the MariaDB data source in Reveal, you must have access to a MariaDB server and the appropriate database driver for your platform: -- For Windows/.NET: [MySqlConnector](https://mysqlconnector.net/) or the MySQL .NET connector. -- For Node.js: A MySQL-compatible driver (e.g. `mysql2`). - -These drivers are essential for establishing connections to your MariaDB data source. After installation, ensure the drivers are properly configured according to the connector documentation. -::: ## Server Configuration diff --git a/i18n/en/code.json b/i18n/en/code.json index 953ea4a5..56409f99 100644 --- a/i18n/en/code.json +++ b/i18n/en/code.json @@ -1,102 +1,135 @@ { "homepage.hero.title": { - "message": "Build Intelligent Analytics Into Your Apps" + "message": "Build Intelligent Analytics Into Your Apps", + "description": "The title of the hero section on the homepage" }, "homepage.hero.subtitle": { - "message": "Embed interactive dashboards, AI-powered insights, and conversational data exploration into any web application." + "message": "Embed interactive dashboards, AI-powered insights, and conversational data exploration into any web application.", + "description": "The subtitle of the hero section on the homepage" }, "homepage.hero.cta.getStarted": { - "message": "Get Started" + "message": "Get Started", + "description": "The primary CTA button on the homepage hero" }, "homepage.hero.cta.exploreAi": { - "message": "Explore AI SDK" + "message": "Explore AI SDK", + "description": "The secondary CTA button on the homepage hero" }, "homepage.ai.badge": { - "message": "NEW" + "message": "NEW", + "description": "The badge label for the AI spotlight section" }, "homepage.ai.title": { - "message": "AI-Powered Analytics" + "message": "AI-Powered Analytics", + "description": "The title of the AI spotlight section" }, "homepage.ai.description": { - "message": "Generate dashboards from natural language, get AI insights from your data, and build conversational analytics — all with a few lines of code." + "message": "Generate dashboards from natural language, get AI insights from your data, and build conversational analytics — all with a few lines of code.", + "description": "The description in the AI spotlight section" }, "homepage.ai.capability1": { - "message": "Natural Language Dashboards" + "message": "Natural Language Dashboards", + "description": "AI capability chip 1" }, "homepage.ai.capability2": { - "message": "AI Insights & Forecasts" + "message": "AI Insights & Forecasts", + "description": "AI capability chip 2" }, "homepage.ai.capability3": { - "message": "Conversational Chat" + "message": "Conversational Chat", + "description": "AI capability chip 3" }, "homepage.ai.cta": { - "message": "Start building with AI" + "message": "Start building with AI", + "description": "The CTA link in the AI spotlight section" }, "homepage.sdk.web.title": { - "message": "Web SDK" + "message": "Web SDK", + "description": "The title of the Web SDK card" }, "homepage.sdk.web.subtitle": { - "message": "Embedded Analytics" + "message": "Embedded Analytics", + "description": "The subtitle of the Web SDK card" }, "homepage.sdk.web.description": { - "message": "Embed interactive dashboards and data visualizations into any web application. Supports 30+ data sources with full customization." + "message": "Embed interactive dashboards and data visualizations into any web application. Supports 30+ data sources with full customization.", + "description": "The description of the Web SDK card" }, "homepage.sdk.web.link.getStarted": { - "message": "Getting Started" + "message": "Getting Started", + "description": "Web SDK quick link" }, "homepage.sdk.web.link.dataSources": { - "message": "Data Sources" + "message": "Data Sources", + "description": "Web SDK quick link" }, "homepage.sdk.web.link.apiRef": { - "message": "API Reference" + "message": "API Reference", + "description": "Web SDK quick link" }, "homepage.sdk.web.link.playground": { - "message": "Developer Playground" + "message": "Developer Playground", + "description": "Web SDK quick link" }, "homepage.sdk.ai.title": { - "message": "AI SDK" + "message": "AI SDK", + "description": "The title of the AI SDK card" }, "homepage.sdk.ai.subtitle": { - "message": "Intelligent Analytics" + "message": "Intelligent Analytics", + "description": "The subtitle of the AI SDK card" }, "homepage.sdk.ai.description": { - "message": "Add AI-powered insights, natural language dashboards, and conversational analytics using LLMs like OpenAI, Anthropic, and Google." + "message": "Add AI-powered insights, natural language dashboards, and conversational analytics using LLMs like OpenAI, Anthropic, and Google.", + "description": "The description of the AI SDK card" }, "homepage.sdk.ai.link.overview": { - "message": "Overview" + "message": "Overview", + "description": "AI SDK quick link" }, "homepage.sdk.ai.link.getStarted": { - "message": "Getting Started" + "message": "Getting Started", + "description": "AI SDK quick link" }, "homepage.sdk.ai.link.insights": { - "message": "Insights API" + "message": "Insights API", + "description": "AI SDK quick link" }, "homepage.sdk.ai.link.chat": { - "message": "Chat API" + "message": "Chat API", + "description": "AI SDK quick link" }, "homepage.frameworks.title": { - "message": "Choose Your Stack" + "message": "Choose Your Stack", + "description": "The title of the framework picker section" }, "homepage.frameworks.subtitle": { - "message": "Step-by-step getting started guides for your preferred framework." + "message": "Step-by-step getting started guides for your preferred framework.", + "description": "The subtitle of the framework picker section" }, "homepage.frameworks.html": { - "message": "HTML / JavaScript" + "message": "HTML / JavaScript", + "description": "Framework picker label" }, "homepage.frameworks.react": { - "message": "React" + "message": "React", + "description": "Framework picker label" }, "homepage.frameworks.angular": { - "message": "Angular" + "message": "Angular", + "description": "Framework picker label" }, "homepage.frameworks.aspnet": { - "message": "ASP.NET" + "message": "ASP.NET", + "description": "Framework picker label" }, "homepage.frameworks.node": { - "message": "Node.js" + "message": "Node.js", + "description": "Framework picker label" }, "homepage.frameworks.springboot": { - "message": "Spring Boot" + "message": "Spring Boot", + "description": "Framework picker label" }, "theme.ErrorPageContent.title": { "message": "This page crashed.", diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md b/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md index bb85331d..e92c2c6a 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/web/adding-data-sources/mariadb.md @@ -11,13 +11,6 @@ import TabItem from '@theme/TabItem'; MariaDB is a community-developed, commercially supported open-source relational database that is a drop-in replacement for MySQL. This topic explains how to connect to MariaDB data sources in your Reveal application to visualize and analyze your data. -:::important Prerequisites -Before configuring the MariaDB data source in Reveal, you must have access to a MariaDB server and the appropriate database driver for your platform: -- For Windows/.NET: [MySqlConnector](https://mysqlconnector.net/) or the MySQL .NET connector. -- For Node.js: A MySQL-compatible driver (e.g. `mysql2`). - -These drivers are essential for establishing connections to your MariaDB data source. After installation, ensure the drivers are properly configured according to the connector documentation. -::: ## Server Configuration