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>
|
||||
<artifactId>qqq-backend-module-rdbms</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<version>0.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<!-- props specifically to this module -->
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.kingsrook.qqq.backend.module.rdbms.actions;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.Connection;
|
||||
import java.util.ArrayList;
|
||||
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.model.actions.InsertRequest;
|
||||
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.QRecordWithStatus;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
|
||||
@ -37,7 +34,7 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
|
||||
InsertResult rs = new InsertResult();
|
||||
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.
|
||||
.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();
|
||||
String tableName = table.getName();
|
||||
|
||||
String columns = table.getFields().stream()
|
||||
List<QFieldMetaData> fieldList = new ArrayList<>(table.getFields().values());
|
||||
String columns = fieldList.stream()
|
||||
.map(this::getColumnName)
|
||||
.collect(Collectors.joining(", "));
|
||||
|
||||
@ -93,7 +94,7 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
|
||||
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!
|
||||
values.put(qFieldMetaData.getName(), value);
|
||||
if(qFieldMetaData.getName().equals(table.getPrimaryKeyField()))
|
||||
|
@ -4,7 +4,7 @@ package com.kingsrook.qqq.backend.module.rdbms.actions;
|
||||
import java.io.InputStream;
|
||||
import java.sql.Connection;
|
||||
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.QFieldMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QFieldType;
|
||||
@ -59,6 +59,7 @@ public class RDBMSActionTest
|
||||
{
|
||||
return new QTableMetaData()
|
||||
.withName("person")
|
||||
.withLabel("Person")
|
||||
.withBackendName(defineBackend().getName())
|
||||
.withPrimaryKeyField("id")
|
||||
.withField(new QFieldMetaData("id", QFieldType.INTEGER))
|
||||
|
Reference in New Issue
Block a user