mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +00:00
Checkpoint
This commit is contained in:
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>com.kingsrook.qqq</groupId>
|
<groupId>com.kingsrook.qqq</groupId>
|
||||||
<artifactId>qqq-backend-module-rdbms</artifactId>
|
<artifactId>qqq-backend-module-rdbms</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>0.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<!-- props specifically to this module -->
|
<!-- props specifically to this module -->
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.kingsrook.qqq.backend.module.rdbms.actions;
|
package com.kingsrook.qqq.backend.module.rdbms.actions;
|
||||||
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -9,8 +8,6 @@ import java.util.stream.Collectors;
|
|||||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.InsertRequest;
|
import com.kingsrook.qqq.backend.core.model.actions.InsertRequest;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.InsertResult;
|
import com.kingsrook.qqq.backend.core.model.actions.InsertResult;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.QFilterCriteria;
|
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.QFilterOrderBy;
|
|
||||||
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
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.QFieldMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
||||||
@ -37,7 +34,7 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
|
|||||||
InsertResult rs = new InsertResult();
|
InsertResult rs = new InsertResult();
|
||||||
QTableMetaData table = insertRequest.getTable();
|
QTableMetaData table = insertRequest.getTable();
|
||||||
|
|
||||||
List<QFieldMetaData> insertableFields = table.getFields().stream()
|
List<QFieldMetaData> insertableFields = table.getFields().values().stream()
|
||||||
.filter(field -> !field.getName().equals("id")) // todo - intent here is to avoid non-insertable fields.
|
.filter(field -> !field.getName().equals("id")) // todo - intent here is to avoid non-insertable fields.
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
@ -98,71 +95,4 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
private String makeWhereClause(QTableMetaData table, List<QFilterCriteria> criteria, List<Serializable> params) throws IllegalArgumentException
|
|
||||||
{
|
|
||||||
List<String> clauses = new ArrayList<>();
|
|
||||||
for(QFilterCriteria criterion : criteria)
|
|
||||||
{
|
|
||||||
QFieldMetaData field = table.getField(criterion.getFieldName());
|
|
||||||
String column = getColumnName(field);
|
|
||||||
String clause = column;
|
|
||||||
Integer expectedNoOfParams = null;
|
|
||||||
switch(criterion.getOperator())
|
|
||||||
{
|
|
||||||
case EQUALS:
|
|
||||||
{
|
|
||||||
clause += " = ? ";
|
|
||||||
expectedNoOfParams = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case NOT_EQUALS:
|
|
||||||
{
|
|
||||||
clause += " != ? ";
|
|
||||||
expectedNoOfParams = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IN:
|
|
||||||
{
|
|
||||||
clause += " IN (" + criterion.getValues().stream().map(x -> "?").collect(Collectors.joining(",")) + ") ";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("Unexpected operator: " + criterion.getOperator());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
clauses.add(clause);
|
|
||||||
if(expectedNoOfParams != null && criterion.getValues().size() != expectedNoOfParams)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("Incorrect number of values given for criteria [" + field.getName() + "]");
|
|
||||||
}
|
|
||||||
params.addAll(criterion.getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
return (String.join(" AND ", clauses));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
private String makeOrderByClause(QTableMetaData table, List<QFilterOrderBy> orderBys)
|
|
||||||
{
|
|
||||||
List<String> clauses = new ArrayList<>();
|
|
||||||
|
|
||||||
for(QFilterOrderBy orderBy : orderBys)
|
|
||||||
{
|
|
||||||
QFieldMetaData field = table.getField(orderBy.getFieldName());
|
|
||||||
String column = getColumnName(field);
|
|
||||||
clauses.add(column + " " + (orderBy.getIsAscending() ? "ASC" : "DESC"));
|
|
||||||
}
|
|
||||||
return (String.join(", ", clauses));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,8 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
|||||||
QTableMetaData table = queryRequest.getTable();
|
QTableMetaData table = queryRequest.getTable();
|
||||||
String tableName = table.getName();
|
String tableName = table.getName();
|
||||||
|
|
||||||
String columns = table.getFields().stream()
|
List<QFieldMetaData> fieldList = new ArrayList<>(table.getFields().values());
|
||||||
|
String columns = fieldList.stream()
|
||||||
.map(this::getColumnName)
|
.map(this::getColumnName)
|
||||||
.collect(Collectors.joining(", "));
|
.collect(Collectors.joining(", "));
|
||||||
|
|
||||||
@ -93,7 +94,7 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
|||||||
|
|
||||||
for(int i = 1; i <= metaData.getColumnCount(); i++)
|
for(int i = 1; i <= metaData.getColumnCount(); i++)
|
||||||
{
|
{
|
||||||
QFieldMetaData qFieldMetaData = table.getFields().get(i - 1);
|
QFieldMetaData qFieldMetaData = fieldList.get(i - 1);
|
||||||
String value = QueryManager.getString(resultSet, i); // todo - types!
|
String value = QueryManager.getString(resultSet, i); // todo - types!
|
||||||
values.put(qFieldMetaData.getName(), value);
|
values.put(qFieldMetaData.getName(), value);
|
||||||
if(qFieldMetaData.getName().equals(table.getPrimaryKeyField()))
|
if(qFieldMetaData.getName().equals(table.getPrimaryKeyField()))
|
||||||
|
@ -4,7 +4,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.QInstance;
|
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData;
|
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.QFieldMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.QFieldType;
|
import com.kingsrook.qqq.backend.core.model.metadata.QFieldType;
|
||||||
@ -59,6 +59,7 @@ public class RDBMSActionTest
|
|||||||
{
|
{
|
||||||
return new QTableMetaData()
|
return new QTableMetaData()
|
||||||
.withName("person")
|
.withName("person")
|
||||||
|
.withLabel("Person")
|
||||||
.withBackendName(defineBackend().getName())
|
.withBackendName(defineBackend().getName())
|
||||||
.withPrimaryKeyField("id")
|
.withPrimaryKeyField("id")
|
||||||
.withField(new QFieldMetaData("id", QFieldType.INTEGER))
|
.withField(new QFieldMetaData("id", QFieldType.INTEGER))
|
||||||
|
Reference in New Issue
Block a user