docs: function (columns, values, opts, cb) {
              if (isFunction(opts)) {
                  cb = opts;
                  opts = null;
              }
              opts = opts || {};
              var ret, self = this;
              if (isInstanceOf(values, Dataset)) {
                  ret = this.db.transaction(function () {
                      return self.insert(columns, values);
                  });
              } else {
  
                  if (!values.length) {
                      ret = new Promise().callback();
                  } else if (!columns.length) {
                      throw new QueryError("Invalid columns in import");
                  }
  
                  var sliceSize = opts.commitEvery || opts.slice, result = [];
                  if (sliceSize) {
                      ret = asyncArray(partition(values, sliceSize)).forEach(function (entries, offset) {
                          offset = (offset * sliceSize);
                          return self.db.transaction(opts, function () {
                              return when(self.multiInsertSql(columns, entries).map(function (st, index) {
                                  return self.executeDui(st).chain(function (res) {
                                      result[offset + index] = res;
                                  });
                              }));
                          });
                      }, 1);
                  } else {
                      var statements = this.multiInsertSql(columns, values);
                      ret = this.db.transaction(function () {
                          return when(statements.map(function (st, index) {
                              return self.executeDui(st).chain(function (res) {
                                  result[index] = res;
                              });
                          }));
                      });
                  }
              }
              return ret.chain(function () {
                  return flatten(result);
              }).classic(cb).promise();
          }