code: function (source) {
              source = argsToArray(arguments);
              var tableAliasNum = 0, sources = [];
              source.forEach(function (s) {
                  if (isInstanceOf(s, Dataset)) {
                      sources.push(new AliasedExpression(s, this._datasetAlias(++tableAliasNum)));
                  } else if (isHash(s)) {
                      for (var i in s) {
                          sources.push(new AliasedExpression(new Identifier(i), s[i]));
                      }
                  } else if (isString(s)) {
                      sources.push(this.stringToIdentifier(s));
                  } else {
                      sources.push(s);
                  }
              }, this);
  
              var o = {from: sources.length ? sources : null};
              if (tableAliasNum) {
                  o.numDatasetSources = tableAliasNum;
              }
              return this.mergeOptions(o);
          }
docs: Returns a copy of the dataset with the source changed. If no
  source is given, removes all tables.  If multiple sources
  are given, it is the same as using a CROSS JOIN (cartesian product) between all tables.
  
  @example
  var dataset = DB.from("items");
  
  dataset.from().sql;
  //=> SELECT *
  
  dataset.from("blah").sql
  //=> SELECT * FROM blah
  
  dataset.from("blah", "foo")
  //=> SELECT * FROM blah, foo
  
  dataset.from({a:"b"}).sql;
  //=> SELECT * FROM a AS b
  
  dataset.from(dataset.from("a").group("b").as("c")).sql;
  //=> "SELECT * FROM (SELECT * FROM a GROUP BY b) AS c"
  
  @param {...String|...patio.sql.Identifier|...patio.Dataset|...Object} [source] tables to select from
  
  @return {patio.Dataset} a cloned dataset with the FROM clause overridden.