Move integration tests to their own module
diff --git a/.travis.yml b/.travis.yml
index ce7e86b..7bb6da4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -15,18 +15,16 @@
 # - http://docs.travis-ci.com/user/workers/standard-infrastructure/
 sudo: false
 
-install:
-  - go get -t -tags integration
-  - go install github.com/mattn/go-sqlite3 # Precompile so test timing is accurate
-
 before_script:
   - mysql -e 'CREATE DATABASE squirrel;'
   - psql -c 'CREATE DATABASE squirrel;' -U postgres
 
 script:
-  - go test -tags integration -args -driver sqlite3
-  - go test -tags integration -args -driver mysql -dataSource travis@/squirrel
-  - go test -tags integration -args -driver postgres -dataSource 'postgres://postgres@localhost/squirrel?sslmode=disable'
+  - go test
+  - cd integration
+  - go test -args -driver sqlite3
+  - go test -args -driver mysql -dataSource travis@/squirrel
+  - go test -args -driver postgres -dataSource 'postgres://postgres@localhost/squirrel?sslmode=disable'
 
 notifications:
   irc: "irc.freenode.net#masterminds"
diff --git a/integration/doc.go b/integration/doc.go
new file mode 100644
index 0000000..3796ab9
--- /dev/null
+++ b/integration/doc.go
@@ -0,0 +1,2 @@
+// This is a tests-only package.
+package integration
diff --git a/integration/go.mod b/integration/go.mod
new file mode 100644
index 0000000..8029ff8
--- /dev/null
+++ b/integration/go.mod
@@ -0,0 +1,14 @@
+module github.com/Masterminds/squirrel/integration
+
+go 1.12
+
+require (
+	github.com/Masterminds/squirrel v1.1.0
+	github.com/go-sql-driver/mysql v1.4.1
+	github.com/lib/pq v1.2.0
+	github.com/mattn/go-sqlite3 v1.13.0
+	github.com/stretchr/testify v1.4.0
+	google.golang.org/appengine v1.6.5 // indirect
+)
+
+replace github.com/Masterminds/squirrel => ../
diff --git a/integration/go.sum b/integration/go.sum
new file mode 100644
index 0000000..0bfcfa9
--- /dev/null
+++ b/integration/go.sum
@@ -0,0 +1,34 @@
+github.com/Masterminds/squirrel v1.1.0 h1:baP1qLdoQCeTw3ifCdOq2dkYc6vGcmRdaociKLbEJXs=
+github.com/Masterminds/squirrel v1.1.0/go.mod h1:yaPeOnPG5ZRwL9oKdTsO/prlkPbXWZlRVMQ/gGlzIuA=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
+github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
+github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
+github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk=
+github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw=
+github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
+github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/mattn/go-sqlite3 v1.13.0 h1:LnJI81JidiW9r7pS/hXe6cFeO5EXNq7KbfvoJLRI69c=
+github.com/mattn/go-sqlite3 v1.13.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/integration/integration_test.go b/integration/integration_test.go
new file mode 100644
index 0000000..e861e7f
--- /dev/null
+++ b/integration/integration_test.go
@@ -0,0 +1,135 @@
+package integration
+
+import (
+	"context"
+	"database/sql"
+	"flag"
+	"fmt"
+	"os"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+
+  sqrl "github.com/Masterminds/squirrel"
+
+	_ "github.com/go-sql-driver/mysql"
+	_ "github.com/lib/pq"
+	_ "github.com/mattn/go-sqlite3"
+)
+
+const (
+	testSchema = `
+		CREATE TABLE squirrel_integration ( k INT, v TEXT )`
+	testData = `
+		INSERT INTO squirrel_integration VALUES
+			(1, 'foo'),
+			(3, 'bar'),
+			(2, 'foo'),
+			(4, 'baz')
+		`
+)
+
+var (
+	sb sqrl.StatementBuilderType
+)
+
+func TestMain(m *testing.M) {
+	var driver, dataSource string
+	flag.StringVar(&driver, "driver", "", "integration database driver")
+	flag.StringVar(&dataSource, "dataSource", "", "integration database data source")
+	flag.Parse()
+
+  if driver == "" {
+    driver = "sqlite3"
+  }
+
+	if driver == "sqlite3" && dataSource == "" {
+		dataSource = ":memory:"
+	}
+
+	db, err := sql.Open(driver, dataSource)
+	if err != nil {
+		fmt.Printf("error opening database: %v\n", err)
+		os.Exit(-1)
+	}
+
+	_, err = db.Exec(testSchema)
+	if err != nil {
+		fmt.Printf("error creating test schema: %v\n", err)
+		os.Exit(-2)
+	}
+
+	defer func() {
+		_, err = db.Exec("DROP TABLE squirrel_integration")
+		fmt.Printf("error removing test schema: %v\n", err)
+	}()
+
+	_, err = db.Exec(testData)
+	if err != nil {
+		fmt.Printf("error inserting test data: %v\n", err)
+		os.Exit(-3)
+	}
+
+	sb = sqrl.StatementBuilder.RunWith(db)
+
+	if driver == "postgres" {
+		sb = sb.PlaceholderFormat(sqrl.Dollar)
+	}
+
+	os.Exit(m.Run())
+}
+
+func assertVals(t *testing.T, s sqrl.SelectBuilder, expected ...string) {
+	rows, err := s.Query()
+	assert.NoError(t, err)
+	defer rows.Close()
+
+	vals := make([]string, len(expected))
+	for i := range vals {
+		assert.True(t, rows.Next())
+		assert.NoError(t, rows.Scan(&vals[i]))
+	}
+	assert.False(t, rows.Next())
+
+	if expected != nil {
+		assert.Equal(t, expected, vals)
+	}
+}
+
+func TestSimpleSelect(t *testing.T) {
+	assertVals(
+		t,
+		sb.Select("v").From("squirrel_integration"),
+		"foo", "bar", "foo", "baz")
+}
+
+func TestEq(t *testing.T) {
+	s := sb.Select("v").From("squirrel_integration")
+	assertVals(t, s.Where(sqrl.Eq{"k": 4}), "baz")
+	assertVals(t, s.Where(sqrl.NotEq{"k": 2}), "foo", "bar", "baz")
+	assertVals(t, s.Where(sqrl.Eq{"k": []int{1, 4}}), "foo", "baz")
+	assertVals(t, s.Where(sqrl.NotEq{"k": []int{1, 4}}), "bar", "foo")
+	assertVals(t, s.Where(sqrl.Eq{"k": nil}))
+	assertVals(t, s.Where(sqrl.NotEq{"k": nil}), "foo", "bar", "foo", "baz")
+	assertVals(t, s.Where(sqrl.Eq{"k": []int{}}))
+	assertVals(t, s.Where(sqrl.NotEq{"k": []int{}}), "foo", "bar", "foo", "baz")
+}
+
+func TestIneq(t *testing.T) {
+	s := sb.Select("v").From("squirrel_integration")
+	assertVals(t, s.Where(sqrl.Lt{"k": 3}), "foo", "foo")
+	assertVals(t, s.Where(sqrl.Gt{"k": 3}), "baz")
+}
+
+func TestConj(t *testing.T) {
+	s := sb.Select("v").From("squirrel_integration")
+	assertVals(t, s.Where(sqrl.And{sqrl.Gt{"k": 1}, sqrl.Lt{"k": 4}}), "bar", "foo")
+	assertVals(t, s.Where(sqrl.Or{sqrl.Gt{"k": 3}, sqrl.Lt{"k": 2}}), "foo", "baz")
+}
+
+func TestContext(t *testing.T) {
+	s := sb.Select("v").From("squirrel_integration")
+	ctx := context.Background()
+	_, err := s.QueryContext(ctx)
+	assert.NoError(t, err)
+}
diff --git a/integration_test.go b/integration_test.go
deleted file mode 100644
index 743e902..0000000
--- a/integration_test.go
+++ /dev/null
@@ -1,131 +0,0 @@
-// +build integration
-
-package squirrel
-
-import (
-	"context"
-	"database/sql"
-	"flag"
-	"fmt"
-	"os"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-
-	_ "github.com/go-sql-driver/mysql"
-	_ "github.com/lib/pq"
-	_ "github.com/mattn/go-sqlite3"
-)
-
-const (
-	testSchema = `
-		CREATE TABLE squirrel_integration ( k INT, v TEXT )`
-	testData = `
-		INSERT INTO squirrel_integration VALUES
-			(1, 'foo'),
-			(3, 'bar'),
-			(2, 'foo'),
-			(4, 'baz')
-		`
-)
-
-var (
-	sqrl StatementBuilderType
-)
-
-func TestMain(m *testing.M) {
-	var driver, dataSource string
-	flag.StringVar(&driver, "driver", "", "integration database driver")
-	flag.StringVar(&dataSource, "dataSource", "", "integration database data source")
-	flag.Parse()
-
-	if driver == "sqlite3" && dataSource == "" {
-		dataSource = ":memory:"
-	}
-
-	db, err := sql.Open(driver, dataSource)
-	if err != nil {
-		fmt.Printf("error opening database: %v\n", err)
-		os.Exit(-1)
-	}
-
-	_, err = db.Exec(testSchema)
-	if err != nil {
-		fmt.Printf("error creating test schema: %v\n", err)
-		os.Exit(-2)
-	}
-
-	defer func() {
-		_, err = db.Exec("DROP TABLE squirrel_integration")
-		fmt.Printf("error removing test schema: %v\n", err)
-	}()
-
-	_, err = db.Exec(testData)
-	if err != nil {
-		fmt.Printf("error inserting test data: %v\n", err)
-		os.Exit(-3)
-	}
-
-	sqrl = StatementBuilder.RunWith(db)
-
-	if driver == "postgres" {
-		sqrl = sqrl.PlaceholderFormat(Dollar)
-	}
-
-	os.Exit(m.Run())
-}
-
-func assertVals(t *testing.T, s SelectBuilder, expected ...string) {
-	rows, err := s.Query()
-	assert.NoError(t, err)
-	defer rows.Close()
-
-	vals := make([]string, len(expected))
-	for i := range vals {
-		assert.True(t, rows.Next())
-		assert.NoError(t, rows.Scan(&vals[i]))
-	}
-	assert.False(t, rows.Next())
-
-	if expected != nil {
-		assert.Equal(t, expected, vals)
-	}
-}
-
-func TestSimpleSelect(t *testing.T) {
-	assertVals(
-		t,
-		sqrl.Select("v").From("squirrel_integration"),
-		"foo", "bar", "foo", "baz")
-}
-
-func TestEq(t *testing.T) {
-	s := sqrl.Select("v").From("squirrel_integration")
-	assertVals(t, s.Where(Eq{"k": 4}), "baz")
-	assertVals(t, s.Where(NotEq{"k": 2}), "foo", "bar", "baz")
-	assertVals(t, s.Where(Eq{"k": []int{1, 4}}), "foo", "baz")
-	assertVals(t, s.Where(NotEq{"k": []int{1, 4}}), "bar", "foo")
-	assertVals(t, s.Where(Eq{"k": nil}))
-	assertVals(t, s.Where(NotEq{"k": nil}), "foo", "bar", "foo", "baz")
-	assertVals(t, s.Where(Eq{"k": []int{}}))
-	assertVals(t, s.Where(NotEq{"k": []int{}}), "foo", "bar", "foo", "baz")
-}
-
-func TestIneq(t *testing.T) {
-	s := sqrl.Select("v").From("squirrel_integration")
-	assertVals(t, s.Where(Lt{"k": 3}), "foo", "foo")
-	assertVals(t, s.Where(Gt{"k": 3}), "baz")
-}
-
-func TestConj(t *testing.T) {
-	s := sqrl.Select("v").From("squirrel_integration")
-	assertVals(t, s.Where(And{Gt{"k": 1}, Lt{"k": 4}}), "bar", "foo")
-	assertVals(t, s.Where(Or{Gt{"k": 3}, Lt{"k": 2}}), "foo", "baz")
-}
-
-func TestContext(t *testing.T) {
-	s := sqrl.Select("v").From("squirrel_integration")
-	ctx := context.Background()
-	_, err := s.QueryContext(ctx)
-	assert.NoError(t, err)
-}