prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Agate type inference is too clever
  ### Describe the bug
  We’re trying to set a value from a {% call statement %} and within the call, one line is SELECT 0 AS my_value...and it then treats it as a boolean (false) in the returned values. 
  
  The same happens if we try SELECT 1 AS my_value, but as soon as we do SELECT 2 AS my_value it treats it like a number (as it should).
  
  ### Steps To Reproduce
  Create a call statement that selects 0, or 1. false, and true respectively will be returned.
  
  ### Expected behavior
  0, or 1 to be returned, as integers.
  
  ### Screenshots and log output
  
  ### System information
  **Which database are you using dbt with?**
  - [ ] postgres
  - [ ] redshift
  - [x] bigquery
  - [ ] snowflake
  - [ ] other (specify: ____________)
  
  
  **The output of `dbt --version`:**
  ```
  installed version: 0.15.0-a1
    latest version: 0.14.2
  Your version of dbt is ahead of the latest release!
  ```
  
  FYI, we run a fork, but that shouldn't have affected anything here.
  
  **The operating system you're using:**
  
  Mojave
  
  **The output of `python --version`:**
  
  Python 3.7.1
  
  ### Additional context
  We'd love a quick fix for this, even if it's ugly!
  
  
  </issue>
  <code>
  [start of core/dbt/clients/agate_helper.py]
  1 from codecs import BOM_UTF8
  2 
  3 import agate
  4 import json
  5 
  6 
  7 BOM = BOM_UTF8.decode('utf-8')  # '\ufeff'
  8 
  9 DEFAULT_TYPE_TESTER = agate.TypeTester(types=[
  10     agate.data_types.Number(null_values=('null', '')),
  11     agate.data_types.TimeDelta(null_values=('null', '')),
  12     agate.data_types.Date(null_values=('null', '')),
  13     agate.data_types.DateTime(null_values=('null', '')),
  14     agate.data_types.Boolean(true_values=('true',),
  15                              false_values=('false',),
  16                              null_values=('null', '')),
  17     agate.data_types.Text(null_values=('null', ''))
  18 ])
  19 
  20 
  21 def table_from_data(data, column_names):
  22     "Convert list of dictionaries into an Agate table"
  23 
  24     # The agate table is generated from a list of dicts, so the column order
  25     # from `data` is not preserved. We can use `select` to reorder the columns
  26     #
  27     # If there is no data, create an empty table with the specified columns
  28 
  29     if len(data) == 0:
  30         return agate.Table([], column_names=column_names)
  31     else:
  32         table = agate.Table.from_object(data, column_types=DEFAULT_TYPE_TESTER)
  33         return table.select(column_names)
  34 
  35 
  36 def table_from_data_flat(data, column_names):
  37     "Convert list of dictionaries into an Agate table"
  38 
  39     rows = []
  40     for _row in data:
  41         row = []
  42         for value in list(_row.values()):
  43             if isinstance(value, (dict, list, tuple)):
  44                 row.append(json.dumps(value))
  45             else:
  46                 row.append(value)
  47         rows.append(row)
  48 
  49     return agate.Table(rows, column_names)
  50 
  51 
  52 def empty_table():
  53     "Returns an empty Agate table. To be used in place of None"
  54 
  55     return agate.Table(rows=[])
  56 
  57 
  58 def as_matrix(table):
  59     "Return an agate table as a matrix of data sans columns"
  60 
  61     return [r.values() for r in table.rows.values()]
  62 
  63 
  64 def from_csv(abspath):
  65     with open(abspath, encoding='utf-8') as fp:
  66         if fp.read(1) != BOM:
  67             fp.seek(0)
  68         return agate.Table.from_csv(fp, column_types=DEFAULT_TYPE_TESTER)
  69
  [end of core/dbt/clients/agate_helper.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/core/dbt/clients/agate_helper.py b/core/dbt/clients/agate_helper.py
  --- a/core/dbt/clients/agate_helper.py
  +++ b/core/dbt/clients/agate_helper.py
  @@ -46,7 +46,7 @@
                   row.append(value)
           rows.append(row)
   
  -    return agate.Table(rows, column_names)
  +    return agate.Table(rows, column_names, column_types=DEFAULT_TYPE_TESTER)
   
   
   def empty_table():
  
verification_info: {"golden_diff": "diff --git a/core/dbt/clients/agate_helper.py b/core/dbt/clients/agate_helper.py\n--- a/core/dbt/clients/agate_helper.py\n+++ b/core/dbt/clients/agate_helper.py\n@@ -46,7 +46,7 @@\n                 row.append(value)\n         rows.append(row)\n \n-    return agate.Table(rows, column_names)\n+    return agate.Table(rows, column_names, column_types=DEFAULT_TYPE_TESTER)\n \n \n def empty_table():\n", "issue": "Agate type inference is too clever\n### Describe the bug\r\nWe\u2019re trying to set a value from a {% call statement %} and within the call, one line is SELECT 0 AS my_value...and it then treats it as a boolean (false) in the returned values. \r\n\r\nThe same happens if we try SELECT 1 AS my_value, but as soon as we do SELECT 2 AS my_value it treats it like a number (as it should).\r\n\r\n### Steps To Reproduce\r\nCreate a call statement that selects 0, or 1. false, and true respectively will be returned.\r\n\r\n### Expected behavior\r\n0, or 1 to be returned, as integers.\r\n\r\n### Screenshots and log output\r\n\r\n### System information\r\n**Which database are you using dbt with?**\r\n- [ ] postgres\r\n- [ ] redshift\r\n- [x] bigquery\r\n- [ ] snowflake\r\n- [ ] other (specify: ____________)\r\n\r\n\r\n**The output of `dbt --version`:**\r\n```\r\ninstalled version: 0.15.0-a1\r\n  latest version: 0.14.2\r\nYour version of dbt is ahead of the latest release!\r\n```\r\n\r\nFYI, we run a fork, but that shouldn't have affected anything here.\r\n\r\n**The operating system you're using:**\r\n\r\nMojave\r\n\r\n**The output of `python --version`:**\r\n\r\nPython 3.7.1\r\n\r\n### Additional context\r\nWe'd love a quick fix for this, even if it's ugly!\r\n\n", "before_files": [{"content": "from codecs import BOM_UTF8\n\nimport agate\nimport json\n\n\nBOM = BOM_UTF8.decode('utf-8')  # '\\ufeff'\n\nDEFAULT_TYPE_TESTER = agate.TypeTester(types=[\n    agate.data_types.Number(null_values=('null', '')),\n    agate.data_types.TimeDelta(null_values=('null', '')),\n    agate.data_types.Date(null_values=('null', '')),\n    agate.data_types.DateTime(null_values=('null', '')),\n    agate.data_types.Boolean(true_values=('true',),\n                             false_values=('false',),\n                             null_values=('null', '')),\n    agate.data_types.Text(null_values=('null', ''))\n])\n\n\ndef table_from_data(data, column_names):\n    \"Convert list of dictionaries into an Agate table\"\n\n    # The agate table is generated from a list of dicts, so the column order\n    # from `data` is not preserved. We can use `select` to reorder the columns\n    #\n    # If there is no data, create an empty table with the specified columns\n\n    if len(data) == 0:\n        return agate.Table([], column_names=column_names)\n    else:\n        table = agate.Table.from_object(data, column_types=DEFAULT_TYPE_TESTER)\n        return table.select(column_names)\n\n\ndef table_from_data_flat(data, column_names):\n    \"Convert list of dictionaries into an Agate table\"\n\n    rows = []\n    for _row in data:\n        row = []\n        for value in list(_row.values()):\n            if isinstance(value, (dict, list, tuple)):\n                row.append(json.dumps(value))\n            else:\n                row.append(value)\n        rows.append(row)\n\n    return agate.Table(rows, column_names)\n\n\ndef empty_table():\n    \"Returns an empty Agate table. To be used in place of None\"\n\n    return agate.Table(rows=[])\n\n\ndef as_matrix(table):\n    \"Return an agate table as a matrix of data sans columns\"\n\n    return [r.values() for r in table.rows.values()]\n\n\ndef from_csv(abspath):\n    with open(abspath, encoding='utf-8') as fp:\n        if fp.read(1) != BOM:\n            fp.seek(0)\n        return agate.Table.from_csv(fp, column_types=DEFAULT_TYPE_TESTER)\n", "path": "core/dbt/clients/agate_helper.py"}]}