(t *testing.T)
| 184 | } |
| 185 | |
| 186 | func TestParserSystemNowFunction(t *testing.T) { |
| 187 | var tests = []struct { |
| 188 | query string |
| 189 | table string |
| 190 | }{ |
| 191 | {"SELECT now() FROM system.local", "local"}, |
| 192 | {"SELECT now() FROM system.peers", "peers"}, |
| 193 | } |
| 194 | |
| 195 | start, _, err := uuid.GetTime() |
| 196 | require.NoError(t, err) |
| 197 | |
| 198 | for _, tt := range tests { |
| 199 | t.Run(tt.query, func(t *testing.T) { |
| 200 | handled, stmt, err := IsQueryHandled(IdentifierFromString(""), tt.query) |
| 201 | assert.NoError(t, err, tt.query) |
| 202 | assert.True(t, handled, tt.query) |
| 203 | require.NotNil(t, stmt) |
| 204 | if selectStmt, ok := stmt.(*SelectStatement); ok { |
| 205 | require.Len(t, selectStmt.Selectors, 1) |
| 206 | selector := selectStmt.Selectors[0] |
| 207 | require.NotNil(t, selector) |
| 208 | if nowSelector, ok := selector.(*NowFuncSelector); ok { |
| 209 | values, err := nowSelector.Values(nil, nil) |
| 210 | assert.NoError(t, err) |
| 211 | assert.Len(t, values, 1) |
| 212 | |
| 213 | var u primitive.UUID |
| 214 | wasNull, err := datacodec.Timeuuid.Decode(values[0], &u, primitive.ProtocolVersion4) |
| 215 | assert.False(t, wasNull) |
| 216 | assert.NoError(t, err) |
| 217 | |
| 218 | v, err := uuid.FromBytes(u[:]) |
| 219 | assert.NoError(t, err) |
| 220 | assert.Equal(t, uuid.RFC4122, v.Variant()) |
| 221 | assert.Equal(t, uuid.Version(1), v.Version()) |
| 222 | assert.GreaterOrEqual(t, v.Time(), start) |
| 223 | |
| 224 | columns, err := nowSelector.Columns(nil, selectStmt) |
| 225 | assert.NoError(t, err) |
| 226 | assert.Len(t, columns, 1) |
| 227 | assert.Equal(t, "system.now()", columns[0].Name) |
| 228 | assert.Equal(t, "system", columns[0].Keyspace) |
| 229 | assert.Equal(t, tt.table, columns[0].Table) |
| 230 | } else { |
| 231 | assert.Fail(t, "expected now function selector") |
| 232 | } |
| 233 | } else { |
| 234 | assert.Fail(t, "expected select statement") |
| 235 | } |
| 236 | }) |
| 237 | } |
| 238 | } |
nothing calls this directly
no test coverage detected