use of org.teiid.language.Expression in project teiid by teiid.
the class SwaggerProcedureExecution method addArgumentValue.
private void addArgumentValue(String argName, Array value, String collectionFormat, StringBuilder queryStr) {
List<Expression> exprs = value.getExpressions();
if (collectionFormat.equalsIgnoreCase("multi")) {
for (int i = 0; i < exprs.size(); i++) {
if (i > 0) {
queryStr.append("&");
}
queryStr.append(argName);
queryStr.append(Tokens.EQ);
Literal l = (Literal) exprs.get(i);
queryStr.append(getURLValue(l));
}
} else {
String delimiter = ",";
if (collectionFormat.equalsIgnoreCase("csv")) {
delimiter = ",";
} else if (collectionFormat.equalsIgnoreCase("ssv")) {
delimiter = " ";
} else if (collectionFormat.equalsIgnoreCase("tsv")) {
delimiter = "\t";
} else if (collectionFormat.equalsIgnoreCase("pipes")) {
delimiter = "|";
}
queryStr.append(argName);
queryStr.append(Tokens.EQ);
for (int i = 0; i < exprs.size(); i++) {
Literal l = (Literal) exprs.get(i);
if (i > 0) {
queryStr.append(delimiter);
}
queryStr.append(getURLValue(l));
}
}
}
use of org.teiid.language.Expression in project teiid by teiid.
the class TestBulkInsertExecution method testFlowAndErrorReturn.
@Test
public void testFlowAndErrorReturn() throws Exception {
NamedTable table = new NamedTable("temp", null, Mockito.mock(Table.class));
ArrayList<ColumnReference> elements = new ArrayList<ColumnReference>();
elements.add(new ColumnReference(table, "one", Mockito.mock(Column.class), Integer.class));
elements.add(new ColumnReference(table, "two", Mockito.mock(Column.class), String.class));
List<Expression> values = new ArrayList<Expression>();
Parameter param = new Parameter();
param.setType(DataTypeManager.DefaultDataClasses.INTEGER);
param.setValueIndex(0);
values.add(param);
param = new Parameter();
param.setType(DataTypeManager.DefaultDataClasses.STRING);
param.setValueIndex(1);
values.add(param);
ExpressionValueSource valueSource = new ExpressionValueSource(values);
Insert insert = new Insert(table, elements, valueSource);
insert.setParameterValues(Arrays.asList(Arrays.asList(2, '2'), Arrays.asList(2, '2'), Arrays.asList(3, '3')).iterator());
Result r1 = Mockito.mock(Result.class);
Result r2 = Mockito.mock(Result.class);
Result r3 = Mockito.mock(Result.class);
Mockito.when(r1.isSuccess()).thenReturn(true);
Mockito.when(r1.isCreated()).thenReturn(true);
Mockito.when(r2.isSuccess()).thenReturn(true);
Mockito.when(r2.isCreated()).thenReturn(true);
Mockito.when(r3.isSuccess()).thenReturn(false);
Mockito.when(r3.isCreated()).thenReturn(false);
com.sforce.async.Error error = new com.sforce.async.Error();
error.setMessage("failed, check your data");
error.setStatusCode(StatusCode.CANNOT_DISABLE_LAST_ADMIN);
Mockito.when(r3.getErrors()).thenReturn(new Error[] { error });
BatchResult batchResult = Mockito.mock(BatchResult.class);
Mockito.when(batchResult.getResult()).thenReturn(new Result[] { r1 }).thenReturn((new Result[] { r2 })).thenReturn(new Result[] { r3 });
SalesforceConnection connection = Mockito.mock(SalesforceConnection.class);
JobInfo jobInfo = Mockito.mock(JobInfo.class);
Mockito.when(connection.createBulkJob(Mockito.anyString(), Mockito.eq(OperationEnum.insert), Mockito.eq(false))).thenReturn(jobInfo);
Mockito.when(connection.getBulkResults(Mockito.any(JobInfo.class), Mockito.anyList())).thenReturn(new BatchResult[] { batchResult, batchResult, batchResult });
SalesForceExecutionFactory config = new SalesForceExecutionFactory();
config.setMaxBulkInsertBatchSize(1);
InsertExecutionImpl updateExecution = new InsertExecutionImpl(config, insert, connection, Mockito.mock(RuntimeMetadata.class), Mockito.mock(ExecutionContext.class));
while (true) {
try {
updateExecution.execute();
org.junit.Assert.assertArrayEquals(new int[] { 1, 1, -3 }, updateExecution.getUpdateCounts());
break;
} catch (DataNotAvailableException e) {
continue;
}
}
Mockito.verify(connection, Mockito.times(1)).createBulkJob(Mockito.anyString(), Mockito.eq(OperationEnum.insert), Mockito.eq(false));
Mockito.verify(connection, Mockito.times(1)).getBulkResults(Mockito.any(JobInfo.class), Mockito.anyList());
}
use of org.teiid.language.Expression in project teiid by teiid.
the class TestBulkInsertExecution method testFlowAndInvocationStack.
@Test
public void testFlowAndInvocationStack() throws Exception {
NamedTable table = new NamedTable("temp", null, Mockito.mock(Table.class));
ArrayList<ColumnReference> elements = new ArrayList<ColumnReference>();
elements.add(new ColumnReference(table, "one", Mockito.mock(Column.class), Integer.class));
elements.add(new ColumnReference(table, "two", Mockito.mock(Column.class), String.class));
List<Expression> values = new ArrayList<Expression>();
Parameter param = new Parameter();
param.setType(DataTypeManager.DefaultDataClasses.INTEGER);
param.setValueIndex(0);
values.add(param);
param = new Parameter();
param.setType(DataTypeManager.DefaultDataClasses.STRING);
param.setValueIndex(1);
values.add(param);
ExpressionValueSource valueSource = new ExpressionValueSource(values);
Insert insert = new Insert(table, elements, valueSource);
insert.setParameterValues(Arrays.asList(Arrays.asList(2, '2'), Arrays.asList(2, '2'), Arrays.asList(3, '3')).iterator());
Result r1 = Mockito.mock(Result.class);
Result r2 = Mockito.mock(Result.class);
Result r3 = Mockito.mock(Result.class);
Mockito.when(r1.isSuccess()).thenReturn(true);
Mockito.when(r1.isCreated()).thenReturn(true);
Mockito.when(r2.isSuccess()).thenReturn(true);
Mockito.when(r2.isCreated()).thenReturn(true);
Mockito.when(r3.isSuccess()).thenReturn(true);
Mockito.when(r3.isCreated()).thenReturn(true);
BatchResult batchResult = Mockito.mock(BatchResult.class);
Mockito.when(batchResult.getResult()).thenReturn(new Result[] { r1 }).thenReturn((new Result[] { r2 })).thenReturn(new Result[] { r3 });
SalesforceConnection connection = Mockito.mock(SalesforceConnection.class);
JobInfo jobInfo = Mockito.mock(JobInfo.class);
Mockito.when(connection.createBulkJob(Mockito.anyString(), Mockito.eq(OperationEnum.insert), Mockito.eq(false))).thenReturn(jobInfo);
Mockito.when(connection.getBulkResults(Mockito.any(JobInfo.class), Mockito.anyList())).thenReturn(new BatchResult[] { batchResult, batchResult, batchResult });
SalesForceExecutionFactory config = new SalesForceExecutionFactory();
config.setMaxBulkInsertBatchSize(1);
InsertExecutionImpl updateExecution = new InsertExecutionImpl(config, insert, connection, Mockito.mock(RuntimeMetadata.class), Mockito.mock(ExecutionContext.class));
while (true) {
try {
updateExecution.execute();
org.junit.Assert.assertArrayEquals(new int[] { 1, 1, 1 }, updateExecution.getUpdateCounts());
break;
} catch (DataNotAvailableException e) {
continue;
}
}
Mockito.verify(connection, Mockito.times(1)).createBulkJob(Mockito.anyString(), Mockito.eq(OperationEnum.insert), Mockito.eq(false));
Mockito.verify(connection, Mockito.times(1)).getBulkResults(Mockito.any(JobInfo.class), Mockito.anyList());
}
use of org.teiid.language.Expression in project teiid by teiid.
the class TestSingleInsert method testDateTypes.
@Test
public void testDateTypes() throws Exception {
NamedTable table = new NamedTable("temp", null, Mockito.mock(Table.class));
ArrayList<ColumnReference> elements = new ArrayList<ColumnReference>();
elements.add(new ColumnReference(table, "one", Mockito.mock(Column.class), Integer.class));
elements.add(new ColumnReference(table, "two", Mockito.mock(Column.class), Date.class));
elements.add(new ColumnReference(table, "three", Mockito.mock(Column.class), Timestamp.class));
List<Expression> values = new ArrayList<Expression>();
values.add(new Literal(1, DataTypeManager.DefaultDataClasses.INTEGER));
values.add(new Literal(TimestampUtil.createDate(100, 01, 1), DataTypeManager.DefaultDataClasses.DATE));
values.add(new Literal(TimestampUtil.createTimestamp(100, 01, 1, 0, 4, 0, 0), DataTypeManager.DefaultDataClasses.TIMESTAMP));
ExpressionValueSource valueSource = new ExpressionValueSource(values);
Insert insert = new Insert(table, elements, valueSource);
SalesforceConnection connection = Mockito.mock(SalesforceConnection.class);
Mockito.stub(connection.create(Mockito.any(DataPayload.class))).toAnswer(new Answer<Integer>() {
@Override
public Integer answer(InvocationOnMock invocation) throws Throwable {
DataPayload payload = (DataPayload) invocation.getArguments()[0];
List<DataPayload.Field> fields = payload.getMessageElements();
assertEquals(3, fields.size());
assertEquals(1, fields.get(0).value);
assertEquals(TimestampUtil.createDate(100, 01, 1), fields.get(1).value);
Calendar cal = (Calendar) fields.get(2).value;
assertEquals(TimeZone.getTimeZone("GMT-1"), cal.getTimeZone());
return 1;
}
});
Mockito.stub(connection.upsert(Mockito.any(DataPayload.class))).toReturn(1);
SalesForceExecutionFactory config = new SalesForceExecutionFactory();
config.setMaxBulkInsertBatchSize(1);
InsertExecutionImpl updateExecution = new InsertExecutionImpl(config, insert, connection, Mockito.mock(RuntimeMetadata.class), Mockito.mock(ExecutionContext.class));
while (true) {
try {
updateExecution.execute();
org.junit.Assert.assertArrayEquals(new int[] { 1 }, updateExecution.getUpdateCounts());
break;
} catch (DataNotAvailableException e) {
continue;
}
}
insert.setUpsert(true);
updateExecution = new InsertExecutionImpl(config, insert, connection, Mockito.mock(RuntimeMetadata.class), Mockito.mock(ExecutionContext.class));
while (true) {
try {
updateExecution.execute();
org.junit.Assert.assertArrayEquals(new int[] { 1 }, updateExecution.getUpdateCounts());
break;
} catch (DataNotAvailableException e) {
continue;
}
}
Mockito.verify(connection).upsert(Mockito.any(DataPayload.class));
}
use of org.teiid.language.Expression in project teiid by teiid.
the class CoherenceUpdateExecution method addChildObject.
private void addChildObject(Table t) throws TranslatorException {
List<ForeignKey> fks = t.getForeignKeys();
ForeignKey fk = fks.get(0);
Table parentTable = fk.getParent();
// the name of the method to obtain the collection is the nameInSource of the foreginKey
String parentToChildMethod = fk.getNameInSource();
if (parentToChildMethod == null) {
// $NON-NLS-1$
final String msg = CoherencePlugin.Util.getString("CoherenceUpdateExecution.noNameInSourceForForeingKey", new Object[] { fk.getName() });
throw new TranslatorException(msg);
}
// there must only be 1 column in the primary key
String parentColName = visitor.getNameFromElement(fk.getPrimaryKey().getColumns().get(0));
Insert icommand = (Insert) command;
List<ColumnReference> insertElementList = icommand.getColumns();
List<Expression> insertValueList = ((ExpressionValueSource) icommand.getValueSource()).getValues();
if (insertElementList.size() != insertValueList.size()) {
throw new TranslatorException("Error: columns.size and values.size are not the same.");
}
ColumnReference insertElement;
String[] nameOfElement = new String[insertElementList.size()];
int parentValueLoc = -1;
for (int i = 0; i < insertElementList.size(); i++) {
insertElement = insertElementList.get(i);
// // call utility class to get NameInSource/Name of element
nameOfElement[i] = visitor.getNameFromElement(insertElement.getMetadataObject());
// match the parent column to the colum in the insert statement
if (nameOfElement[i].equalsIgnoreCase(parentColName)) {
parentValueLoc = i;
}
}
if (parentColName != null && parentValueLoc == -1) {
// $NON-NLS-1$
final String msg = CoherencePlugin.Util.getString("CoherenceUpdateExecution.noColumnMatchedForeignColumn", new Object[] { t.getName(), parentColName });
throw new TranslatorException(msg);
}
// get the parent key and find the root object
Object parentValue = insertValueList.get(parentValueLoc);
Object val;
if (parentValue instanceof Literal) {
Literal literalValue = (Literal) parentValue;
val = literalValue.getValue();
} else {
val = parentValue;
}
Object parentObject = null;
// get the parent object from the cache
try {
List<Object> result = this.connection.get(CoherenceFilterUtil.createCompareFilter(parentColName, val, Operator.EQ, val.getClass()));
// visitor.createFilter(parentColName + " = " + val));
if (result == null || result.isEmpty()) {
// $NON-NLS-1$
final String msg = CoherencePlugin.Util.getString("CoherenceUpdateExecution.noobjectfound", new Object[] { parentTable.getName(), parentColName, val });
throw new TranslatorException(msg);
}
parentObject = result.get(0);
} catch (ResourceException e) {
throw new TranslatorException(e);
}
// create and load the child object data
Object newChildObject = cacheTranslator.createObject(insertElementList, insertValueList, this.visitor, t);
// /--- questions
// / --- how to not process - setvalue for parent column
// / --- need to get the key value off the object of the parent
// get the key value to use to for adding to the cache
Object parentContainer = ObjectSourceMethodManager.getValue("get" + parentToChildMethod, parentObject);
if (parentContainer == null) {
// $NON-NLS-1$
final String msg = CoherencePlugin.Util.getString("CoherenceUpdateExecution.noParentContainerObjectFound", new Object[] { parentTable.getName(), parentToChildMethod });
throw new TranslatorException(msg);
}
if (parentContainer.getClass().isArray()) {
} else if (parentContainer instanceof Collection) {
Collection c = (Collection) parentContainer;
c.add(newChildObject);
} else if (parentContainer instanceof Map) {
Map m = (Map) parentContainer;
m.put(1, newChildObject);
}
try {
this.connection.update(parentValue, parentObject);
} catch (ResourceException e) {
throw new TranslatorException(e);
}
}
Aggregations