|
| 1 | +package gitbase |
| 2 | + |
| 3 | +import ( |
| 4 | + "testing" |
| 5 | + |
| 6 | + "github.com/stretchr/testify/require" |
| 7 | + "gopkg.in/src-d/go-mysql-server.v0/sql" |
| 8 | + "gopkg.in/src-d/go-mysql-server.v0/sql/expression" |
| 9 | +) |
| 10 | + |
| 11 | +func TestCommitTreesRowIter(t *testing.T) { |
| 12 | + require := require.New(t) |
| 13 | + ctx, _, cleanup := setup(t) |
| 14 | + defer cleanup() |
| 15 | + |
| 16 | + iter, err := new(commitTreesTable).RowIter(ctx) |
| 17 | + require.NoError(err) |
| 18 | + |
| 19 | + rows, err := sql.RowIterToRows(iter) |
| 20 | + require.NoError(err) |
| 21 | + |
| 22 | + for i, row := range rows { |
| 23 | + // remove repository ids |
| 24 | + rows[i] = row[1:] |
| 25 | + } |
| 26 | + |
| 27 | + expected := []sql.Row{ |
| 28 | + {"e8d3ffab552895c19b9fcf7aa264d277cde33881", "dbd3641b371024f44d0e469a9c8f5457b0660de1"}, |
| 29 | + {"e8d3ffab552895c19b9fcf7aa264d277cde33881", "a39771a7651f97faf5c72e08224d857fc35133db"}, |
| 30 | + {"e8d3ffab552895c19b9fcf7aa264d277cde33881", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"}, |
| 31 | + {"e8d3ffab552895c19b9fcf7aa264d277cde33881", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"}, |
| 32 | + |
| 33 | + {"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "a8d315b2b1c615d43042c3a62402b8a54288cf5c"}, |
| 34 | + {"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "a39771a7651f97faf5c72e08224d857fc35133db"}, |
| 35 | + {"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"}, |
| 36 | + {"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"}, |
| 37 | + {"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "cf4aa3b38974fb7d81f367c0830f7d78d65ab86b"}, |
| 38 | + |
| 39 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "fb72698cab7617ac416264415f13224dfd7a165e"}, |
| 40 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "a39771a7651f97faf5c72e08224d857fc35133db"}, |
| 41 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"}, |
| 42 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"}, |
| 43 | + |
| 44 | + {"af2d6a6954d532f8ffb47615169c8fdf9d383a1a", "4d081c50e250fa32ea8b1313cf8bb7c2ad7627fd"}, |
| 45 | + {"af2d6a6954d532f8ffb47615169c8fdf9d383a1a", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"}, |
| 46 | + |
| 47 | + {"1669dce138d9b841a518c64b10914d88f5e488ea", "eba74343e2f15d62adedfd8c883ee0262b5c8021"}, |
| 48 | + {"a5b8b09e2f8fcb0bb99d3ccb0958157b40890d69", "c2d30fa8ef288618f65f6eed6e168e0d514886f4"}, |
| 49 | + {"b8e471f58bcbca63b07bda20e428190409c2db47", "c2d30fa8ef288618f65f6eed6e168e0d514886f4"}, |
| 50 | + {"35e85108805c84807bc66a02d91535e1e24b38b9", "8dcef98b1d52143e1e2dbc458ffe38f925786bf2"}, |
| 51 | + {"b029517f6300c2da0f4b651b8642506cd6aaf45d", "aa9b383c260e1d05fbbf6b30a02914555e20c725"}, |
| 52 | + } |
| 53 | + |
| 54 | + require.Equal(expected, rows) |
| 55 | +} |
| 56 | + |
| 57 | +func TestCommitTreesPushdown(t *testing.T) { |
| 58 | + ctx, _, cleanup := setup(t) |
| 59 | + defer cleanup() |
| 60 | + |
| 61 | + table := new(commitTreesTable) |
| 62 | + testCases := []struct { |
| 63 | + name string |
| 64 | + filters []sql.Expression |
| 65 | + expected []sql.Row |
| 66 | + }{ |
| 67 | + { |
| 68 | + "commit filter", |
| 69 | + []sql.Expression{ |
| 70 | + expression.NewEquals( |
| 71 | + expression.NewGetFieldWithTable(1, sql.Text, CommitTreesTableName, "commit_hash", false), |
| 72 | + expression.NewLiteral("918c48b83bd081e863dbe1b80f8998f058cd8294", sql.Text), |
| 73 | + ), |
| 74 | + }, |
| 75 | + []sql.Row{ |
| 76 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "fb72698cab7617ac416264415f13224dfd7a165e"}, |
| 77 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "a39771a7651f97faf5c72e08224d857fc35133db"}, |
| 78 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"}, |
| 79 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"}, |
| 80 | + }, |
| 81 | + }, |
| 82 | + { |
| 83 | + "tree filter", |
| 84 | + []sql.Expression{ |
| 85 | + expression.NewEquals( |
| 86 | + expression.NewGetFieldWithTable(2, sql.Text, CommitTreesTableName, "tree_hash", false), |
| 87 | + expression.NewLiteral("586af567d0bb5e771e49bdd9434f5e0fb76d25fa", sql.Text), |
| 88 | + ), |
| 89 | + }, |
| 90 | + []sql.Row{ |
| 91 | + {"e8d3ffab552895c19b9fcf7aa264d277cde33881", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"}, |
| 92 | + {"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"}, |
| 93 | + {"918c48b83bd081e863dbe1b80f8998f058cd8294", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"}, |
| 94 | + }, |
| 95 | + }, |
| 96 | + } |
| 97 | + |
| 98 | + for _, tt := range testCases { |
| 99 | + t.Run(tt.name, func(t *testing.T) { |
| 100 | + require := require.New(t) |
| 101 | + iter, err := table.WithProjectAndFilters(ctx, nil, tt.filters) |
| 102 | + require.NoError(err) |
| 103 | + |
| 104 | + rows, err := sql.RowIterToRows(iter) |
| 105 | + require.NoError(err) |
| 106 | + |
| 107 | + for i, row := range rows { |
| 108 | + // remove repository_ids |
| 109 | + rows[i] = row[1:] |
| 110 | + } |
| 111 | + |
| 112 | + require.Equal(tt.expected, rows) |
| 113 | + }) |
| 114 | + } |
| 115 | +} |
0 commit comments