<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="fusiontables_v1.html">Fusion Tables API</a> . <a href="fusiontables_v1.column.html">column</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(tableId, columnId)</a></code></p>
<p class="firstline">Deletes the column.</p>
<p class="toc_element">
  <code><a href="#get">get(tableId, columnId)</a></code></p>
<p class="firstline">Retrieves a specific column by its id.</p>
<p class="toc_element">
  <code><a href="#insert">insert(tableId, body)</a></code></p>
<p class="firstline">Adds a new column to the table.</p>
<p class="toc_element">
  <code><a href="#list">list(tableId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">Retrieves a list of columns.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(tableId, columnId, body)</a></code></p>
<p class="firstline">Updates the name or type of an existing column. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(tableId, columnId, body)</a></code></p>
<p class="firstline">Updates the name or type of an existing column.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(tableId, columnId)</code>
  <pre>Deletes the column.

Args:
  tableId: string, Table from which the column is being deleted. (required)
  columnId: string, Name or identifier for the column being deleted. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(tableId, columnId)</code>
  <pre>Retrieves a specific column by its id.

Args:
  tableId: string, Table to which the column belongs. (required)
  columnId: string, Name or identifier for the column that is being requested. (required)

Returns:
  An object of the form:

    { # Specifies the id, name and type of a column in a table.
      "kind": "fusiontables#column", # Type name: a template for an individual column.
      "type": "A String", # Required type of the column.
      "columnId": 42, # Identifier for the column.
      "name": "A String", # Required name of the column.
      "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
        "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
        "columnId": 42, # The id of the column in the base table from which this column is derived.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(tableId, body)</code>
  <pre>Adds a new column to the table.

Args:
  tableId: string, Table for which a new column is being added. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Specifies the id, name and type of a column in a table.
    "kind": "fusiontables#column", # Type name: a template for an individual column.
    "type": "A String", # Required type of the column.
    "columnId": 42, # Identifier for the column.
    "name": "A String", # Required name of the column.
    "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
      "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
      "columnId": 42, # The id of the column in the base table from which this column is derived.
    },
  }


Returns:
  An object of the form:

    { # Specifies the id, name and type of a column in a table.
      "kind": "fusiontables#column", # Type name: a template for an individual column.
      "type": "A String", # Required type of the column.
      "columnId": 42, # Identifier for the column.
      "name": "A String", # Required name of the column.
      "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
        "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
        "columnId": 42, # The id of the column in the base table from which this column is derived.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(tableId, pageToken=None, maxResults=None)</code>
  <pre>Retrieves a list of columns.

Args:
  tableId: string, Table whose columns are being listed. (required)
  pageToken: string, Continuation token specifying which result page to return. Optional.
  maxResults: integer, Maximum number of columns to return. Optional. Default is 5.

Returns:
  An object of the form:

    { # Represents a list of columns in a table.
    "nextPageToken": "A String", # Token used to access the next page of this result. No token is displayed if there are no more tokens left.
    "items": [ # List of all requested columns.
      { # Specifies the id, name and type of a column in a table.
          "kind": "fusiontables#column", # Type name: a template for an individual column.
          "type": "A String", # Required type of the column.
          "columnId": 42, # Identifier for the column.
          "name": "A String", # Required name of the column.
          "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
            "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
            "columnId": 42, # The id of the column in the base table from which this column is derived.
          },
        },
    ],
    "kind": "fusiontables#columnList", # Type name: a list of all tables.
    "totalItems": 42, # Total number of columns for the table.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(tableId, columnId, body)</code>
  <pre>Updates the name or type of an existing column. This method supports patch semantics.

Args:
  tableId: string, Table for which the column is being updated. (required)
  columnId: string, Name or identifier for the column that is being updated. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Specifies the id, name and type of a column in a table.
    "kind": "fusiontables#column", # Type name: a template for an individual column.
    "type": "A String", # Required type of the column.
    "columnId": 42, # Identifier for the column.
    "name": "A String", # Required name of the column.
    "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
      "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
      "columnId": 42, # The id of the column in the base table from which this column is derived.
    },
  }


Returns:
  An object of the form:

    { # Specifies the id, name and type of a column in a table.
      "kind": "fusiontables#column", # Type name: a template for an individual column.
      "type": "A String", # Required type of the column.
      "columnId": 42, # Identifier for the column.
      "name": "A String", # Required name of the column.
      "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
        "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
        "columnId": 42, # The id of the column in the base table from which this column is derived.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(tableId, columnId, body)</code>
  <pre>Updates the name or type of an existing column.

Args:
  tableId: string, Table for which the column is being updated. (required)
  columnId: string, Name or identifier for the column that is being updated. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Specifies the id, name and type of a column in a table.
    "kind": "fusiontables#column", # Type name: a template for an individual column.
    "type": "A String", # Required type of the column.
    "columnId": 42, # Identifier for the column.
    "name": "A String", # Required name of the column.
    "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
      "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
      "columnId": 42, # The id of the column in the base table from which this column is derived.
    },
  }


Returns:
  An object of the form:

    { # Specifies the id, name and type of a column in a table.
      "kind": "fusiontables#column", # Type name: a template for an individual column.
      "type": "A String", # Required type of the column.
      "columnId": 42, # Identifier for the column.
      "name": "A String", # Required name of the column.
      "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
        "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
        "columnId": 42, # The id of the column in the base table from which this column is derived.
      },
    }</pre>
</div>

</body></html>