}
if ( (existingType instanceof WrapperEventType) &&
(typeService.getEventTypes()[0] instanceof BeanEventType) &&
(exprEvaluators.length == 0)) {
WrapperEventType wrapperType = (WrapperEventType) existingType;
if (wrapperType.getUnderlyingEventType() instanceof BeanEventType) {
return new EvalInsertBeanWrapRecast(wrapperType, eventAdapterService, 0, typeService.getEventTypes());
}
}
selectExprInsertEventBean = SelectExprInsertEventBean.getInsertUnderlying(eventAdapterService, existingType);
}
if ((existingType != null) && (selectExprInsertEventBean != null))
{
selectExprInsertEventBean.initialize(isUsingWildcard, typeService, exprEvaluators, columnNames, expressionReturnTypes, methodResolutionService, eventAdapterService);
resultEventType = existingType;
return new EvalInsertNative(resultEventType, selectExprInsertEventBean);
}
else if (existingType != null && selPropertyTypes.isEmpty() && existingType instanceof MapEventType) {
resultEventType = existingType;
return new EvalInsertMapTypeCoercion(resultEventType, eventAdapterService);
}
else if (selPropertyTypes.isEmpty() && eventType instanceof BeanEventType) {
BeanEventType beanEventType = (BeanEventType) eventType;
resultEventType = eventAdapterService.addBeanTypeByName(insertIntoDesc.getEventTypeName(), beanEventType.getUnderlyingType(), false);
}
else {
resultEventType = eventAdapterService.addWrapperType(insertIntoDesc.getEventTypeName(), eventType, selPropertyTypes, false, true);
}
}
if (singleStreamWrapper) {
if (!isRevisionEvent) {
return new EvalInsertWildcardSSWrapper(selectExprContext, resultEventType);
}
else {
return new EvalInsertWildcardSSWrapperRevision(selectExprContext, resultEventType, vaeProcessor);
}
}
if (joinWildcardProcessor == null) {
if (!isRevisionEvent) {
if (resultEventType instanceof WrapperEventType) {
return new EvalInsertWildcardWrapper(selectExprContext, resultEventType);
}
else {
return new EvalInsertWildcardBean(selectExprContext, resultEventType);
}
}
else {
return new EvalInsertWildcardRevision(selectExprContext, resultEventType, vaeProcessor);
}
}
else {
if (!isRevisionEvent) {
return new EvalInsertWildcardJoin(selectExprContext, resultEventType, joinWildcardProcessor);
}
else {
return new EvalInsertWildcardJoinRevision(selectExprContext, resultEventType, joinWildcardProcessor, vaeProcessor);
}
}
}
// not using wildcard
resultEventType = null;
if ((columnNames.length == 1) && (insertIntoDesc.getColumnNames().size() == 0))
{
EventType existingType = eventAdapterService.getExistsTypeByName(insertIntoDesc.getEventTypeName());
if (existingType != null)
{
// check if the existing type and new type are compatible
Object columnOneType = expressionReturnTypes[0];
if (existingType instanceof WrapperEventType)
{
WrapperEventType wrapperType = (WrapperEventType) existingType;
// Map and Object both supported
if (wrapperType.getUnderlyingEventType().getUnderlyingType() == columnOneType)
{
singleColumnCoercion = true;
resultEventType = existingType;
}
}
if ((existingType instanceof BeanEventType) && (columnOneType instanceof Class))
{
BeanEventType beanType = (BeanEventType) existingType;
// Map and Object both supported
if (JavaClassHelper.isSubclassOrImplementsInterface((Class) columnOneType, beanType.getUnderlyingType()))
{
singleColumnCoercion = true;
resultEventType = existingType;
}
}
}
}
if (resultEventType == null)
{
if (vaeProcessor != null)
{
// Use an anonymous type if the target is not a variant stream
if (valueAddEventService.getValueAddProcessor(insertIntoDesc.getEventTypeName()) == null) {
resultEventType = eventAdapterService.createAnonymousMapType(statementId + "_vae_" + CollectionUtil.toString(assignedTypeNumberStack, "_"), selPropertyTypes);
}
else {
String statementName = "stmt_" + statementId + "_insert";
resultEventType = eventAdapterService.addNestableMapType(statementName, selPropertyTypes, null, false, false, false, false, true);
}
}
else
{
EventType existingType = eventAdapterService.getExistsTypeByName(insertIntoDesc.getEventTypeName());
if (existingType == null) {
// The type may however be an auto-import or fully-qualified class name
Class clazz = null;
try {
clazz = this.methodResolutionService.resolveClass(insertIntoDesc.getEventTypeName());
}
catch (EngineImportException e) {
log.debug("Target stream name '" + insertIntoDesc.getEventTypeName() + "' is not resolved as a class name");
}
if (clazz != null) {
existingType = eventAdapterService.addBeanType(clazz.getName(), clazz, false, false, false);
}
}
SelectExprInsertEventBean selectExprInsertEventBean = null;
if (existingType != null)
{
selectExprInsertEventBean = SelectExprInsertEventBean.getInsertUnderlying(eventAdapterService, existingType);
}
if ((existingType != null) && (selectExprInsertEventBean != null))
{
selectExprInsertEventBean.initialize(isUsingWildcard, typeService, exprEvaluators, columnNames, expressionReturnTypes, methodResolutionService, eventAdapterService);
resultEventType = existingType;
return new EvalInsertNative(resultEventType, selectExprInsertEventBean);
}
else
{
resultEventType = eventAdapterService.addNestableMapType(insertIntoDesc.getEventTypeName(), selPropertyTypes, null, false, false, false, false, true);
}
}
}
if (vaeProcessor != null)
{
vaeProcessor.validateEventType(resultEventType);
vaeInnerEventType = resultEventType;
resultEventType = vaeProcessor.getValueAddEventType();
isRevisionEvent = true;
}
if (singleColumnCoercion) {
if (!isRevisionEvent) {
if (resultEventType instanceof MapEventType) {
return new EvalInsertNoWildcardSingleColCoercionMap(selectExprContext, resultEventType);
}
else if (resultEventType instanceof BeanEventType) {
return new EvalInsertNoWildcardSingleColCoercionBean(selectExprContext, resultEventType);
}
else {
WrapperEventType wrapperEventType = (WrapperEventType) resultEventType;
if (wrapperEventType.getUnderlyingEventType() instanceof VariantEventType) {
VariantEventType variantEventType = (VariantEventType) wrapperEventType.getUnderlyingEventType();
vaeProcessor = valueAddEventService.getValueAddProcessor(variantEventType.getName());
return new EvalInsertNoWildcardSingleColCoercionBeanWrapVariant(selectExprContext, resultEventType, vaeProcessor);
}
else {
return new EvalInsertNoWildcardSingleColCoercionBeanWrap(selectExprContext, resultEventType);