mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
QQQ-14 updates to meta-data and other refactoring in qqq-backend-core
This commit is contained in:
@ -46,6 +46,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<module name="TreeWalker">
|
<module name="TreeWalker">
|
||||||
|
<module name="SuppressWarningsHolder"/>
|
||||||
<module name="OuterTypeFilename"/>
|
<module name="OuterTypeFilename"/>
|
||||||
<module name="IllegalTokenText">
|
<module name="IllegalTokenText">
|
||||||
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
|
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
|
||||||
@ -171,7 +172,7 @@
|
|||||||
<property name="caseIndent" value="3"/>
|
<property name="caseIndent" value="3"/>
|
||||||
<property name="throwsIndent" value="6"/>
|
<property name="throwsIndent" value="6"/>
|
||||||
<property name="lineWrappingIndentation" value="3"/>
|
<property name="lineWrappingIndentation" value="3"/>
|
||||||
<property name="arrayInitIndent" value="2"/>
|
<property name="arrayInitIndent" value="6"/>
|
||||||
</module>
|
</module>
|
||||||
<!--
|
<!--
|
||||||
<module name="AbbreviationAsWordInName">
|
<module name="AbbreviationAsWordInName">
|
||||||
@ -260,4 +261,5 @@
|
|||||||
<module name="MissingOverride"/>
|
<module name="MissingOverride"/>
|
||||||
|
|
||||||
</module>
|
</module>
|
||||||
|
<module name="SuppressWarningsFilter"/>
|
||||||
</module>
|
</module>
|
||||||
|
6
pom.xml
6
pom.xml
@ -89,6 +89,12 @@
|
|||||||
<version>5.8.1</version>
|
<version>5.8.1</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>3.23.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
package com.kingsrook.qqq.backend.module.rdbms;
|
package com.kingsrook.qqq.backend.module.rdbms;
|
||||||
|
|
||||||
|
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QTableBackendDetails;
|
||||||
import com.kingsrook.qqq.backend.core.modules.interfaces.DeleteInterface;
|
import com.kingsrook.qqq.backend.core.modules.interfaces.DeleteInterface;
|
||||||
import com.kingsrook.qqq.backend.core.modules.interfaces.InsertInterface;
|
import com.kingsrook.qqq.backend.core.modules.interfaces.InsertInterface;
|
||||||
import com.kingsrook.qqq.backend.core.modules.interfaces.QBackendModuleInterface;
|
import com.kingsrook.qqq.backend.core.modules.interfaces.QBackendModuleInterface;
|
||||||
@ -31,6 +33,8 @@ import com.kingsrook.qqq.backend.module.rdbms.actions.RDBMSDeleteAction;
|
|||||||
import com.kingsrook.qqq.backend.module.rdbms.actions.RDBMSInsertAction;
|
import com.kingsrook.qqq.backend.module.rdbms.actions.RDBMSInsertAction;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.actions.RDBMSQueryAction;
|
import com.kingsrook.qqq.backend.module.rdbms.actions.RDBMSQueryAction;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.actions.RDBMSUpdateAction;
|
import com.kingsrook.qqq.backend.module.rdbms.actions.RDBMSUpdateAction;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails;
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -38,6 +42,38 @@ import com.kingsrook.qqq.backend.module.rdbms.actions.RDBMSUpdateAction;
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
public class RDBMSBackendModule implements QBackendModuleInterface
|
public class RDBMSBackendModule implements QBackendModuleInterface
|
||||||
{
|
{
|
||||||
|
/*******************************************************************************
|
||||||
|
** Method where a backend module must be able to provide its type (name).
|
||||||
|
*******************************************************************************/
|
||||||
|
public String getBackendType()
|
||||||
|
{
|
||||||
|
return ("rdbms");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Method to identify the class used for backend meta data for this module.
|
||||||
|
*******************************************************************************/
|
||||||
|
@Override
|
||||||
|
public Class<? extends QBackendMetaData> getBackendMetaDataClass()
|
||||||
|
{
|
||||||
|
return (RDBMSBackendMetaData.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Method to identify the class used for table-backend details for this module.
|
||||||
|
*******************************************************************************/
|
||||||
|
@Override
|
||||||
|
public Class<? extends QTableBackendDetails> getTableBackendDetailsClass()
|
||||||
|
{
|
||||||
|
return RDBMSTableBackendDetails.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -59,6 +95,7 @@ public class RDBMSBackendModule implements QBackendModuleInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -78,4 +115,5 @@ public class RDBMSBackendModule implements QBackendModuleInterface
|
|||||||
{
|
{
|
||||||
return (new RDBMSDeleteAction());
|
return (new RDBMSDeleteAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,9 @@ package com.kingsrook.qqq.backend.module.rdbms.actions;
|
|||||||
|
|
||||||
|
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.core.utils.StringUtils;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails;
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -31,6 +34,23 @@ import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
|||||||
public abstract class AbstractRDBMSAction
|
public abstract class AbstractRDBMSAction
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
protected String getTableName(QTableMetaData table)
|
||||||
|
{
|
||||||
|
if(table.getBackendDetails() instanceof RDBMSTableBackendDetails details)
|
||||||
|
{
|
||||||
|
if(StringUtils.hasContent(details.getTableName()))
|
||||||
|
{
|
||||||
|
return (details.getTableName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (table.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
@ -34,7 +34,7 @@ import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
|||||||
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
|
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.modules.interfaces.DeleteInterface;
|
import com.kingsrook.qqq.backend.core.modules.interfaces.DeleteInterface;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendMetaData;
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ public class RDBMSDeleteAction extends AbstractRDBMSAction implements DeleteInte
|
|||||||
DeleteResult rs = new DeleteResult();
|
DeleteResult rs = new DeleteResult();
|
||||||
QTableMetaData table = deleteRequest.getTable();
|
QTableMetaData table = deleteRequest.getTable();
|
||||||
|
|
||||||
String tableName = table.getName();
|
String tableName = getTableName(table);
|
||||||
String primaryKeyName = getColumnName(table.getField(table.getPrimaryKeyField()));
|
String primaryKeyName = getColumnName(table.getField(table.getPrimaryKeyField()));
|
||||||
String sql = "DELETE FROM "
|
String sql = "DELETE FROM "
|
||||||
+ tableName
|
+ tableName
|
||||||
@ -69,7 +69,7 @@ public class RDBMSDeleteAction extends AbstractRDBMSAction implements DeleteInte
|
|||||||
// todo sql customization - can edit sql and/or param list
|
// todo sql customization - can edit sql and/or param list
|
||||||
|
|
||||||
ConnectionManager connectionManager = new ConnectionManager();
|
ConnectionManager connectionManager = new ConnectionManager();
|
||||||
Connection connection = connectionManager.getConnection(new RDBMSBackendMetaData(deleteRequest.getBackend()));
|
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData)deleteRequest.getBackend());
|
||||||
|
|
||||||
QueryManager.executeUpdateForRowCount(connection, sql, params);
|
QueryManager.executeUpdateForRowCount(connection, sql, params);
|
||||||
List<QRecordWithStatus> recordsWithStatus = new ArrayList<>();
|
List<QRecordWithStatus> recordsWithStatus = new ArrayList<>();
|
||||||
|
@ -34,7 +34,7 @@ import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
|
|||||||
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.modules.interfaces.InsertInterface;
|
import com.kingsrook.qqq.backend.core.modules.interfaces.InsertInterface;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendMetaData;
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
|
|||||||
.map(x -> "?")
|
.map(x -> "?")
|
||||||
.collect(Collectors.joining(", "));
|
.collect(Collectors.joining(", "));
|
||||||
|
|
||||||
String tableName = table.getName();
|
String tableName = getTableName(table);
|
||||||
StringBuilder sql = new StringBuilder("INSERT INTO ").append(tableName).append("(").append(columns).append(") VALUES");
|
StringBuilder sql = new StringBuilder("INSERT INTO ").append(tableName).append("(").append(columns).append(") VALUES");
|
||||||
List<Object> params = new ArrayList<>();
|
List<Object> params = new ArrayList<>();
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
|
|||||||
// todo sql customization - can edit sql and/or param list
|
// todo sql customization - can edit sql and/or param list
|
||||||
|
|
||||||
ConnectionManager connectionManager = new ConnectionManager();
|
ConnectionManager connectionManager = new ConnectionManager();
|
||||||
Connection connection = connectionManager.getConnection(new RDBMSBackendMetaData(insertRequest.getBackend()));
|
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) insertRequest.getBackend());
|
||||||
|
|
||||||
// QueryResult rs = new QueryResult();
|
// QueryResult rs = new QueryResult();
|
||||||
// List<QRecord> records = new ArrayList<>();
|
// List<QRecord> records = new ArrayList<>();
|
||||||
|
@ -44,7 +44,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.QFieldType;
|
|||||||
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.modules.interfaces.QueryInterface;
|
import com.kingsrook.qqq.backend.core.modules.interfaces.QueryInterface;
|
||||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendMetaData;
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
QTableMetaData table = queryRequest.getTable();
|
QTableMetaData table = queryRequest.getTable();
|
||||||
String tableName = table.getName();
|
String tableName = getTableName(table);
|
||||||
|
|
||||||
List<QFieldMetaData> fieldList = new ArrayList<>(table.getFields().values());
|
List<QFieldMetaData> fieldList = new ArrayList<>(table.getFields().values());
|
||||||
String columns = fieldList.stream()
|
String columns = fieldList.stream()
|
||||||
@ -98,7 +98,7 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
|||||||
// todo sql customization - can edit sql and/or param list
|
// todo sql customization - can edit sql and/or param list
|
||||||
|
|
||||||
ConnectionManager connectionManager = new ConnectionManager();
|
ConnectionManager connectionManager = new ConnectionManager();
|
||||||
Connection connection = connectionManager.getConnection(new RDBMSBackendMetaData(queryRequest.getBackend()));
|
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) queryRequest.getBackend());
|
||||||
|
|
||||||
QueryResult rs = new QueryResult();
|
QueryResult rs = new QueryResult();
|
||||||
List<QRecord> records = new ArrayList<>();
|
List<QRecord> records = new ArrayList<>();
|
||||||
|
@ -34,7 +34,7 @@ import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
|
|||||||
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.modules.interfaces.UpdateInterface;
|
import com.kingsrook.qqq.backend.core.modules.interfaces.UpdateInterface;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendMetaData;
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
|
|||||||
.map(f -> this.getColumnName(f) + " = ?")
|
.map(f -> this.getColumnName(f) + " = ?")
|
||||||
.collect(Collectors.joining(", "));
|
.collect(Collectors.joining(", "));
|
||||||
|
|
||||||
String tableName = table.getName();
|
String tableName = getTableName(table);
|
||||||
StringBuilder sql = new StringBuilder("UPDATE ").append(tableName)
|
StringBuilder sql = new StringBuilder("UPDATE ").append(tableName)
|
||||||
.append(" SET ").append(columns)
|
.append(" SET ").append(columns)
|
||||||
.append(" WHERE ").append(getColumnName(table.getField(table.getPrimaryKeyField()))).append(" = ?");
|
.append(" WHERE ").append(getColumnName(table.getField(table.getPrimaryKeyField()))).append(" = ?");
|
||||||
@ -80,7 +80,7 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
|
|||||||
// todo sql customization - can edit sql and/or param list
|
// todo sql customization - can edit sql and/or param list
|
||||||
|
|
||||||
ConnectionManager connectionManager = new ConnectionManager();
|
ConnectionManager connectionManager = new ConnectionManager();
|
||||||
Connection connection = connectionManager.getConnection(new RDBMSBackendMetaData(updateRequest.getBackend()));
|
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) updateRequest.getBackend());
|
||||||
|
|
||||||
QRecordWithStatus recordWithStatus = new QRecordWithStatus(record);
|
QRecordWithStatus recordWithStatus = new QRecordWithStatus(record);
|
||||||
recordsWithStatus.add(recordWithStatus);
|
recordsWithStatus.add(recordWithStatus);
|
||||||
|
@ -25,7 +25,7 @@ package com.kingsrook.qqq.backend.module.rdbms.jdbc;
|
|||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendMetaData;
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
@ -0,0 +1,255 @@
|
|||||||
|
/*
|
||||||
|
* QQQ - Low-code Application Framework for Engineers.
|
||||||
|
* Copyright (C) 2021-2022. Kingsrook, LLC
|
||||||
|
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||||
|
* contact@kingsrook.com
|
||||||
|
* https://github.com/Kingsrook/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.kingsrook.qqq.backend.module.rdbms.model.metadata;
|
||||||
|
|
||||||
|
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendModule;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public class RDBMSBackendMetaData extends QBackendMetaData
|
||||||
|
{
|
||||||
|
private String vendor;
|
||||||
|
private String hostName;
|
||||||
|
private Integer port;
|
||||||
|
private String databaseName;
|
||||||
|
private String username;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Default Constructor.
|
||||||
|
*******************************************************************************/
|
||||||
|
public RDBMSBackendMetaData()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
setBackendType(RDBMSBackendModule.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Getter for vendor
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public String getVendor()
|
||||||
|
{
|
||||||
|
return vendor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Setter for vendor
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public void setVendor(String vendor)
|
||||||
|
{
|
||||||
|
this.vendor = vendor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent Setter for vendor
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public RDBMSBackendMetaData withVendor(String vendor)
|
||||||
|
{
|
||||||
|
this.vendor = vendor;
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Getter for hostName
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public String getHostName()
|
||||||
|
{
|
||||||
|
return hostName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Setter for hostName
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public void setHostName(String hostName)
|
||||||
|
{
|
||||||
|
this.hostName = hostName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent Setter for hostName
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public RDBMSBackendMetaData withHostName(String hostName)
|
||||||
|
{
|
||||||
|
this.hostName = hostName;
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Getter for port
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public Integer getPort()
|
||||||
|
{
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Setter for port
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public void setPort(Integer port)
|
||||||
|
{
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent Setter for port
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public RDBMSBackendMetaData withPort(Integer port)
|
||||||
|
{
|
||||||
|
this.port = port;
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Getter for databaseName
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public String getDatabaseName()
|
||||||
|
{
|
||||||
|
return databaseName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Setter for databaseName
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public void setDatabaseName(String databaseName)
|
||||||
|
{
|
||||||
|
this.databaseName = databaseName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent Setter for databaseName
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public RDBMSBackendMetaData withDatabaseName(String databaseName)
|
||||||
|
{
|
||||||
|
this.databaseName = databaseName;
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Getter for username
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public String getUsername()
|
||||||
|
{
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Setter for username
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public void setUsername(String username)
|
||||||
|
{
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent Setter for username
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public RDBMSBackendMetaData withUsername(String username)
|
||||||
|
{
|
||||||
|
this.username = username;
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Getter for password
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public String getPassword()
|
||||||
|
{
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Setter for password
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public void setPassword(String password)
|
||||||
|
{
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent Setter for password
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public RDBMSBackendMetaData withPassword(String password)
|
||||||
|
{
|
||||||
|
this.password = password;
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
}
|
@ -19,86 +19,63 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.kingsrook.qqq.backend.module.rdbms;
|
package com.kingsrook.qqq.backend.module.rdbms.model.metadata;
|
||||||
|
|
||||||
|
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QTableBackendDetails;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendModule;
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
** Extension of QTableBackendDetails, with details specific to an RDBMS table.
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
public class RDBMSBackendMetaData extends QBackendMetaData
|
public class RDBMSTableBackendDetails extends QTableBackendDetails
|
||||||
{
|
{
|
||||||
|
private String tableName;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
** Default Constructor.
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
public RDBMSBackendMetaData(QBackendMetaData source)
|
public RDBMSTableBackendDetails()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
setName(source.getName());
|
setBackendType(RDBMSBackendModule.class);
|
||||||
setValues(source.getValues());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
** Getter for tableName
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
public String getVendor()
|
public String getTableName()
|
||||||
{
|
{
|
||||||
return getValue("vendor");
|
return tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
** Setter for tableName
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
public String getHostName()
|
public void setTableName(String tableName)
|
||||||
{
|
{
|
||||||
return getValue("hostName");
|
this.tableName = tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
** Fluent Setter for tableName
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
public String getPort()
|
public RDBMSTableBackendDetails withTableName(String tableName)
|
||||||
{
|
{
|
||||||
return getValue("port");
|
this.tableName = tableName;
|
||||||
}
|
return (this);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
public String getDatabaseName()
|
|
||||||
{
|
|
||||||
return getValue("databaseName");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
public String getUsername()
|
|
||||||
{
|
|
||||||
return getValue("username");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
public String getPassword()
|
|
||||||
{
|
|
||||||
return getValue("password");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* QQQ - Low-code Application Framework for Engineers.
|
||||||
|
* Copyright (C) 2021-2022. Kingsrook, LLC
|
||||||
|
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||||
|
* contact@kingsrook.com
|
||||||
|
* https://github.com/Kingsrook/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.kingsrook.qqq.backend.module.rdbms;
|
||||||
|
|
||||||
|
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QFieldType;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public class TestUtils
|
||||||
|
{
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public static QInstance defineInstance()
|
||||||
|
{
|
||||||
|
QInstance qInstance = new QInstance();
|
||||||
|
qInstance.addBackend(defineBackend());
|
||||||
|
qInstance.addTable(defineTablePerson());
|
||||||
|
return (qInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public static RDBMSBackendMetaData defineBackend()
|
||||||
|
{
|
||||||
|
RDBMSBackendMetaData rdbmsBackendMetaData = new RDBMSBackendMetaData()
|
||||||
|
.withVendor("h2")
|
||||||
|
.withHostName("mem")
|
||||||
|
.withDatabaseName("test_database")
|
||||||
|
.withUsername("sa")
|
||||||
|
.withPassword("");
|
||||||
|
rdbmsBackendMetaData.setName("default");
|
||||||
|
return (rdbmsBackendMetaData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public static QTableMetaData defineTablePerson()
|
||||||
|
{
|
||||||
|
return new QTableMetaData()
|
||||||
|
.withName("a-person")
|
||||||
|
.withLabel("Person")
|
||||||
|
.withBackendName(defineBackend().getName())
|
||||||
|
.withPrimaryKeyField("id")
|
||||||
|
.withField(new QFieldMetaData("id", QFieldType.INTEGER))
|
||||||
|
.withField(new QFieldMetaData("createDate", QFieldType.DATE_TIME).withBackendName("create_date"))
|
||||||
|
.withField(new QFieldMetaData("modifyDate", QFieldType.DATE_TIME).withBackendName("modify_date"))
|
||||||
|
.withField(new QFieldMetaData("firstName", QFieldType.STRING).withBackendName("first_name"))
|
||||||
|
.withField(new QFieldMetaData("lastName", QFieldType.STRING).withBackendName("last_name"))
|
||||||
|
.withField(new QFieldMetaData("birthDate", QFieldType.DATE).withBackendName("birth_date"))
|
||||||
|
.withField(new QFieldMetaData("email", QFieldType.STRING))
|
||||||
|
.withBackendDetails(new RDBMSTableBackendDetails().withTableName("person"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -25,12 +25,7 @@ package com.kingsrook.qqq.backend.module.rdbms.actions;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData;
|
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QFieldType;
|
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
|
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendMetaData;
|
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
@ -43,56 +38,6 @@ import static junit.framework.Assert.assertNotNull;
|
|||||||
public class RDBMSActionTest
|
public class RDBMSActionTest
|
||||||
{
|
{
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
protected QInstance defineInstance()
|
|
||||||
{
|
|
||||||
QInstance qInstance = new QInstance();
|
|
||||||
qInstance.addBackend(defineBackend());
|
|
||||||
qInstance.addTable(defineTablePerson());
|
|
||||||
return (qInstance);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
protected QBackendMetaData defineBackend()
|
|
||||||
{
|
|
||||||
return new QBackendMetaData()
|
|
||||||
.withName("default")
|
|
||||||
.withType("rdbms")
|
|
||||||
.withValue("vendor", "h2")
|
|
||||||
.withValue("hostName", "mem")
|
|
||||||
.withValue("databaseName", "test_database")
|
|
||||||
.withValue("username", "sa")
|
|
||||||
.withValue("password", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
public QTableMetaData defineTablePerson()
|
|
||||||
{
|
|
||||||
return new QTableMetaData()
|
|
||||||
.withName("person")
|
|
||||||
.withLabel("Person")
|
|
||||||
.withBackendName(defineBackend().getName())
|
|
||||||
.withPrimaryKeyField("id")
|
|
||||||
.withField(new QFieldMetaData("id", QFieldType.INTEGER))
|
|
||||||
.withField(new QFieldMetaData("createDate", QFieldType.DATE_TIME).withBackendName("create_date"))
|
|
||||||
.withField(new QFieldMetaData("modifyDate", QFieldType.DATE_TIME).withBackendName("modify_date"))
|
|
||||||
.withField(new QFieldMetaData("firstName", QFieldType.STRING).withBackendName("first_name"))
|
|
||||||
.withField(new QFieldMetaData("lastName", QFieldType.STRING).withBackendName("last_name"))
|
|
||||||
.withField(new QFieldMetaData("birthDate", QFieldType.DATE).withBackendName("birth_date"))
|
|
||||||
.withField(new QFieldMetaData("email", QFieldType.STRING));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
@ -101,7 +46,7 @@ public class RDBMSActionTest
|
|||||||
protected void primeTestDatabase() throws Exception
|
protected void primeTestDatabase() throws Exception
|
||||||
{
|
{
|
||||||
ConnectionManager connectionManager = new ConnectionManager();
|
ConnectionManager connectionManager = new ConnectionManager();
|
||||||
Connection connection = connectionManager.getConnection(new RDBMSBackendMetaData(defineBackend()));
|
Connection connection = connectionManager.getConnection(TestUtils.defineBackend());
|
||||||
InputStream primeTestDatabaseSqlStream = RDBMSActionTest.class.getResourceAsStream("/prime-test-database.sql");
|
InputStream primeTestDatabaseSqlStream = RDBMSActionTest.class.getResourceAsStream("/prime-test-database.sql");
|
||||||
assertNotNull(primeTestDatabaseSqlStream);
|
assertNotNull(primeTestDatabaseSqlStream);
|
||||||
List<String> lines = (List<String>) IOUtils.readLines(primeTestDatabaseSqlStream);
|
List<String> lines = (List<String>) IOUtils.readLines(primeTestDatabaseSqlStream);
|
||||||
@ -121,7 +66,7 @@ public class RDBMSActionTest
|
|||||||
protected void runTestSql(String sql, QueryManager.ResultSetProcessor resultSetProcessor) throws Exception
|
protected void runTestSql(String sql, QueryManager.ResultSetProcessor resultSetProcessor) throws Exception
|
||||||
{
|
{
|
||||||
ConnectionManager connectionManager = new ConnectionManager();
|
ConnectionManager connectionManager = new ConnectionManager();
|
||||||
Connection connection = connectionManager.getConnection(new RDBMSBackendMetaData(defineBackend()));
|
Connection connection = connectionManager.getConnection(TestUtils.defineBackend());
|
||||||
QueryManager.executeStatement(connection, sql, resultSetProcessor);
|
QueryManager.executeStatement(connection, sql, resultSetProcessor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ import java.util.List;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest;
|
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult;
|
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult;
|
||||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
@ -113,8 +114,8 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
|
|||||||
private DeleteRequest initDeleteRequest()
|
private DeleteRequest initDeleteRequest()
|
||||||
{
|
{
|
||||||
DeleteRequest deleteRequest = new DeleteRequest();
|
DeleteRequest deleteRequest = new DeleteRequest();
|
||||||
deleteRequest.setInstance(defineInstance());
|
deleteRequest.setInstance(TestUtils.defineInstance());
|
||||||
deleteRequest.setTableName(defineTablePerson().getName());
|
deleteRequest.setTableName(TestUtils.defineTablePerson().getName());
|
||||||
return deleteRequest;
|
return deleteRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ import com.kingsrook.qqq.backend.core.model.actions.insert.InsertRequest;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertResult;
|
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertResult;
|
||||||
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
||||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
@ -135,8 +136,8 @@ public class RDBMSInsertActionTest extends RDBMSActionTest
|
|||||||
private InsertRequest initInsertRequest()
|
private InsertRequest initInsertRequest()
|
||||||
{
|
{
|
||||||
InsertRequest insertRequest = new InsertRequest();
|
InsertRequest insertRequest = new InsertRequest();
|
||||||
insertRequest.setInstance(defineInstance());
|
insertRequest.setInstance(TestUtils.defineInstance());
|
||||||
insertRequest.setTableName(defineTablePerson().getName());
|
insertRequest.setTableName(TestUtils.defineTablePerson().getName());
|
||||||
return insertRequest;
|
return insertRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import com.kingsrook.qqq.backend.core.model.actions.query.QFilterCriteria;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.query.QQueryFilter;
|
import com.kingsrook.qqq.backend.core.model.actions.query.QQueryFilter;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.query.QueryRequest;
|
import com.kingsrook.qqq.backend.core.model.actions.query.QueryRequest;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.query.QueryResult;
|
import com.kingsrook.qqq.backend.core.model.actions.query.QueryResult;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -413,8 +414,8 @@ public class RDBMSQueryActionTest extends RDBMSActionTest
|
|||||||
private QueryRequest initQueryRequest()
|
private QueryRequest initQueryRequest()
|
||||||
{
|
{
|
||||||
QueryRequest queryRequest = new QueryRequest();
|
QueryRequest queryRequest = new QueryRequest();
|
||||||
queryRequest.setInstance(defineInstance());
|
queryRequest.setInstance(TestUtils.defineInstance());
|
||||||
queryRequest.setTableName(defineTablePerson().getName());
|
queryRequest.setTableName(TestUtils.defineTablePerson().getName());
|
||||||
return queryRequest;
|
return queryRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ import com.kingsrook.qqq.backend.core.model.actions.update.UpdateRequest;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateResult;
|
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateResult;
|
||||||
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
||||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
@ -148,8 +149,8 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
|
|||||||
private UpdateRequest initUpdateRequest()
|
private UpdateRequest initUpdateRequest()
|
||||||
{
|
{
|
||||||
UpdateRequest updateRequest = new UpdateRequest();
|
UpdateRequest updateRequest = new UpdateRequest();
|
||||||
updateRequest.setInstance(defineInstance());
|
updateRequest.setInstance(TestUtils.defineInstance());
|
||||||
updateRequest.setTableName(defineTablePerson().getName());
|
updateRequest.setTableName(TestUtils.defineTablePerson().getName());
|
||||||
return updateRequest;
|
return updateRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* QQQ - Low-code Application Framework for Engineers.
|
||||||
|
* Copyright (C) 2021-2022. Kingsrook, LLC
|
||||||
|
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||||
|
* contact@kingsrook.com
|
||||||
|
* https://github.com/Kingsrook/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.kingsrook.qqq.backend.module.rdbms.model.metadata;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import com.kingsrook.qqq.backend.core.adapters.QInstanceAdapter;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||||
|
import com.kingsrook.qqq.backend.core.utils.JsonUtils;
|
||||||
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Unit test for RDBMSBackendMetaData
|
||||||
|
*******************************************************************************/
|
||||||
|
class RDBMSBackendMetaDataTest
|
||||||
|
{
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Test that an instance can be serialized as expected
|
||||||
|
*******************************************************************************/
|
||||||
|
@Test
|
||||||
|
public void testSerializingToJson()
|
||||||
|
{
|
||||||
|
QInstance qInstance = TestUtils.defineInstance();
|
||||||
|
String json = new QInstanceAdapter().qInstanceToJsonIncludingBackend(qInstance);
|
||||||
|
System.out.println(JsonUtils.prettyPrint(json));
|
||||||
|
System.out.println(json);
|
||||||
|
String expectToContain = """
|
||||||
|
"backends":{"default":{"hostName":"mem","password":"","databaseName":"test_database\"""";
|
||||||
|
assertTrue(json.contains(expectToContain));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Test that an instance can be deserialized as expected
|
||||||
|
*******************************************************************************/
|
||||||
|
@Test
|
||||||
|
public void testDeserializingFromJson() throws IOException
|
||||||
|
{
|
||||||
|
QInstanceAdapter qInstanceAdapter = new QInstanceAdapter();
|
||||||
|
|
||||||
|
QInstance qInstance = TestUtils.defineInstance();
|
||||||
|
String json = qInstanceAdapter.qInstanceToJsonIncludingBackend(qInstance);
|
||||||
|
|
||||||
|
QInstance deserialized = qInstanceAdapter.jsonToQInstanceIncludingBackends(json);
|
||||||
|
assertThat(deserialized).usingRecursiveComparison().isEqualTo(qInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user