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

Venki Korukanti updated DRILL-425:
----------------------------------

    Description: 
Following plan outputs empty values for nullableStr1 column after 1st row. 

{code}
{
    head:{
        type:"APACHE_DRILL_PHYSICAL",
        version:"1",
        generator:{
            type:"manual"
        }
    },
    graph:[
        {
            @id:1,
            pop:"mock-sub-scan",
            url: "http://apache.org";,
            entries:[
                {records: 100, types: [
                   {name: "nullableStr1", type: "VARCHAR", mode: "OPTIONAL"}
                ]}
            ]
        },
        {
            @id:2,
            child: 1,
            pop:"project",
            exprs: [
                { ref: "nullableStr1", expr: "nullableStr1" }
            ]
        },
        {
            @id: 3,
            child: 2,
            pop: "screen"
        }
    ]
}
{code}

After transferring the ValueVector from 'scan' to 'project', ProjectRecordBatch 
calls NullableVarCharVector.setValueCount. As part of this method, all records 
from "lastSet +1" to "count" are set to empty byte array, because 'lastSet' is 
not set as part of the mock-sub-scan (default to 0), all but the first record 
have empty string data.

{code}
    public void setValueCount(int valueCount) {
     .....
      for (int i = lastSet + 1; i < valueCount; i++) {
        values.getMutator().set(i, new byte[]{});
      }
     ....
    }
{code}


  was:
Following plan outputs empty values for nullableStr1 column after 1st row. 

{
    head:{
        type:"APACHE_DRILL_PHYSICAL",
        version:"1",
        generator:{
            type:"manual"
        }
    },
    graph:[
        {
            @id:1,
            pop:"mock-sub-scan",
            url: "http://apache.org";,
            entries:[
                {records: 100, types: [
                   {name: "nullableStr1", type: "VARCHAR", mode: "OPTIONAL"},
                ]}
            ]
        },
        {
            @id:2,
            child: 1,
            pop:"project",
            exprs: [
                { ref: "nullableStr1", expr: "nullableStr1" }
            ]
        },
        {
            @id: 3,
            child: 2,
            pop: "screen"
        }
    ]
}

After transferring the ValueVector from 'scan' to 'project', ProjectRecordBatch 
calls NullableVarCharVector.setValueCount. As part of this method, all records 
from "lastSet +1" to "count" are set to empty byte array, because 'lastSet' is 
not set as part of the mock-sub-scan (default to 0), all but the first record 
have empty string data.

{code}
    public void setValueCount(int valueCount) {
     .....
      for (int i = lastSet + 1; i < valueCount; i++) {
        values.getMutator().set(i, new byte[]{});
      }
     ....
    }
{code}



> mock-sub-scan is not setting 'lastSet' in NullableVarCharVector or 
> NullableVar16CharVector
> ------------------------------------------------------------------------------------------
>
>                 Key: DRILL-425
>                 URL: https://issues.apache.org/jira/browse/DRILL-425
>             Project: Apache Drill
>          Issue Type: Bug
>            Reporter: Venki Korukanti
>            Assignee: Steven Phillips
>
> Following plan outputs empty values for nullableStr1 column after 1st row. 
> {code}
> {
>     head:{
>         type:"APACHE_DRILL_PHYSICAL",
>         version:"1",
>         generator:{
>             type:"manual"
>         }
>     },
>     graph:[
>         {
>             @id:1,
>             pop:"mock-sub-scan",
>             url: "http://apache.org";,
>             entries:[
>                 {records: 100, types: [
>                    {name: "nullableStr1", type: "VARCHAR", mode: "OPTIONAL"}
>                 ]}
>             ]
>         },
>         {
>             @id:2,
>             child: 1,
>             pop:"project",
>             exprs: [
>                 { ref: "nullableStr1", expr: "nullableStr1" }
>             ]
>         },
>         {
>             @id: 3,
>             child: 2,
>             pop: "screen"
>         }
>     ]
> }
> {code}
> After transferring the ValueVector from 'scan' to 'project', 
> ProjectRecordBatch calls NullableVarCharVector.setValueCount. As part of this 
> method, all records from "lastSet +1" to "count" are set to empty byte array, 
> because 'lastSet' is not set as part of the mock-sub-scan (default to 0), all 
> but the first record have empty string data.
> {code}
>     public void setValueCount(int valueCount) {
>      .....
>       for (int i = lastSet + 1; i < valueCount; i++) {
>         values.getMutator().set(i, new byte[]{});
>       }
>      ....
>     }
> {code}



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

Reply via email to