[ 
https://issues.apache.org/jira/browse/TAJO-803?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hyunsik Choi updated TAJO-803:
------------------------------

    Attachment: TAJO-803_2.patch

+1

The patch looks nice to me. The patch omits one case where the schema of target 
table and the schema of expressions are different to each other. 

Example:
{noformat}
create table TEST (col1 int4, col2 float4, col3 text);
insert overwrite into TEST  (col1, col3) select 1::INT4, 'test';
{noformat}

This needs only trivial change. So, I've fixed slightly 
LogicalPlanner::buildProjectedInsert() as follows:
{code:java}
if (child instanceof Projectable) {
      Projectable projectionNode = (Projectable) insertNode.getChild();

      // Modifying projected columns by adding NULL constants
      // It is because that table appender does not support target columns to 
be written.
      List<Target> targets = TUtil.newList();
{code}

Also, I've added one more unit test case for reproducing the case I mentioned.

Thank you for your contribution. I'll commit the patch shortly.

>  INSERT INTO without FROM throws ClassCastException.
> ----------------------------------------------------
>
>                 Key: TAJO-803
>                 URL: https://issues.apache.org/jira/browse/TAJO-803
>             Project: Tajo
>          Issue Type: Bug
>            Reporter: Hyoungjun Kim
>            Assignee: Hyoungjun Kim
>            Priority: Trivial
>         Attachments: TAJO-803.patch, TAJO-803_2.patch
>
>
> The following query throws ClassCastException in the TajoMaster.
> {noformat}
> default> create table temp_table (id int, name text)  using csv with 
> ('csvfile.delimiter'='|');
> default> insert overwrite into temp_table select 123::int4 as id, 'abc' as 
> name;
> ERROR: org.apache.tajo.engine.planner.logical.EvalExprNode cannot be cast to 
> org.apache.tajo.engine.planner.logical.ProjectionNode
> {noformat}
> TajoMaster's log
> {noformat}
> java.lang.ClassCastException: 
> org.apache.tajo.engine.planner.logical.EvalExprNode cannot be cast to 
> org.apache.tajo.engine.planner.logical.ProjectionNode
>         at 
> org.apache.tajo.engine.planner.LogicalPlanner.buildProjectedInsert(LogicalPlanner.java:1237)
>         at 
> org.apache.tajo.engine.planner.LogicalPlanner.buildInsertIntoTablePlan(LogicalPlanner.java:1224)
>         at 
> org.apache.tajo.engine.planner.LogicalPlanner.visitInsert(LogicalPlanner.java:1140)
>         at 
> org.apache.tajo.engine.planner.LogicalPlanner.visitInsert(LogicalPlanner.java:58)
>         at 
> org.apache.tajo.engine.planner.BaseAlgebraVisitor.visit(BaseAlgebraVisitor.java:123)
>         at 
> org.apache.tajo.engine.planner.LogicalPlanner.createPlan(LogicalPlanner.java:121)
>         at 
> org.apache.tajo.engine.planner.LogicalPlanner.createPlan(LogicalPlanner.java:108)
>         at 
> org.apache.tajo.master.GlobalEngine.createLogicalPlan(GlobalEngine.java:341)
>         at 
> org.apache.tajo.master.GlobalEngine.executeQuery(GlobalEngine.java:144)
>         at 
> org.apache.tajo.master.TajoMasterClientService$TajoMasterClientProtocolServiceHandler.submitQuery(TajoMasterClientService.java:260)
>         at 
> org.apache.tajo.ipc.TajoMasterClientProtocol$TajoMasterClientProtocolService$2.callBlockingMethod(TajoMasterClientProtocol.java:495)
>         at 
> org.apache.tajo.rpc.BlockingRpcServer$ServerHandler.messageReceived(BlockingRpcServer.java:103)
>         at 
> org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
>         at 
> org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
>         at 
> org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
>         at 
> org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
>         at 
> org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:70)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to