public void Insert_RepeatedRecordField()
        {
            var client  = BigqueryClient.Create(_fixture.ProjectId);
            var dataset = client.GetDataset(_fixture.DatasetId);
            var table   = dataset.GetTable(_fixture.ComplexTypesTableId);
            var guid    = Guid.NewGuid().ToString();
            var row     = new InsertRow
            {
                ["guid"]  = guid,
                ["names"] = new[] {
                    new InsertRow {
                        ["first"] = "a", ["last"] = "b"
                    },
                    new InsertRow {
                        ["first"] = "x", ["last"] = "y"
                    }
                }
            };

            table.Insert(row);
            var command = new BigqueryCommand($"SELECT guid, name.first, name.last FROM {table}, UNNEST(names) AS name WHERE guid=@guid ORDER BY name.first")
            {
                Parameters = { { "guid", BigqueryParameterType.String, guid } }
            };
            var queryResults = WaitForRows(client, command)
                               .Select(r => new { Guid = (string)r["guid"], FirstName = (string)r["first"], LastName = (string)r["last"] })
                               .ToList();
            var expectedResults = new[]
            {
                new { Guid = guid, FirstName = "a", LastName = "b" },
                new { Guid = guid, FirstName = "x", LastName = "y" }
            };

            Assert.Equal(expectedResults, queryResults);
        }
        public void Insert_RecordField()
        {
            var client  = BigqueryClient.Create(_fixture.ProjectId);
            var dataset = client.GetDataset(_fixture.DatasetId);
            var table   = dataset.GetTable(_fixture.ComplexTypesTableId);
            var guid    = Guid.NewGuid().ToString();
            var row     = new InsertRow
            {
                ["guid"]     = guid,
                ["position"] = new InsertRow {
                    ["x"] = 10L, ["y"] = 20L
                }
            };

            table.Insert(row);
            var command = new BigqueryCommand($"SELECT guid, position.x, position.y FROM {table} WHERE guid=@guid")
            {
                Parameters = { { "guid", BigqueryParameterType.String, guid } }
            };
            var queryResults = WaitForRows(client, command)
                               .Select(r => new { Guid = (string)r["guid"], X = (long)r["x"], Y = (long)r["y"] })
                               .ToList();
            var expectedResults = new[]
            {
                new { Guid = guid, X = 10L, Y = 20L }
            };

            Assert.Equal(expectedResults, queryResults);
        }
        public void Insert_RepeatedField()
        {
            var client  = BigqueryClient.Create(_fixture.ProjectId);
            var dataset = client.GetDataset(_fixture.DatasetId);
            var table   = dataset.GetTable(_fixture.ComplexTypesTableId);
            var guid    = Guid.NewGuid().ToString();
            var row     = new InsertRow
            {
                ["guid"] = guid,
                // The null element will be ignored here (at the server side)
                ["tags"] = new[] { "a", null, "b" }
            };

            table.Insert(row);
            var command = new BigqueryCommand($"SELECT guid, tag FROM {table}, UNNEST(tags) AS tag WHERE guid=@guid ORDER BY tag")
            {
                Parameters = { { "guid", BigqueryParameterType.String, guid } }
            };
            var queryResults = WaitForRows(client, command)
                               .Select(r => new { Guid = (string)r["guid"], Tag = (string)r["tag"] })
                               .ToList();
            var expectedResults = new[]
            {
                new { Guid = guid, Tag = "a" },
                new { Guid = guid, Tag = "b" }
            };

            Assert.Equal(expectedResults, queryResults);
        }
        public void NullParameter()
        {
            var client    = BigqueryClient.Create(_fixture.ProjectId);
            var table     = client.GetTable(_fixture.DatasetId, _fixture.HighScoreTableId);
            var parameter = new BigqueryParameter("player", BigqueryParameterType.String, "Angela");
            var command   = new BigqueryCommand($"SELECT score FROM {table} WHERE player=@player")
            {
                Parameters = { parameter }
            };
            var resultSet = client.ExecuteQuery(command).PollUntilCompleted().GetResultSet(5);

            Assert.Equal(1, resultSet.Rows.Count);
            Assert.Equal(95, (long)resultSet.Rows[0]["score"]);

            // SQL rules: nothing equals null
            parameter.Value = null;
            resultSet       = client.ExecuteQuery(command).PollUntilCompleted().GetResultSet(5);
            Assert.Equal(0, resultSet.Rows.Count);

            // But we should be able to find the null value this way.
            command.Sql = $"SELECT score FROM {table} WHERE player=@player OR (player IS NULL AND @player IS NULL)";
            resultSet   = client.ExecuteQuery(command).PollUntilCompleted().GetResultSet(5);
            Assert.Equal(1, resultSet.Rows.Count);
            Assert.Equal(1, (long)resultSet.Rows[0]["score"]);
        }
        private BigqueryRow GetSingleRow(BigqueryCommand command)
        {
            var client  = BigqueryClient.Create(_fixture.ProjectId);
            var results = client.ExecuteQuery(command).PollUntilCompleted().GetResultSet(10);

            Assert.Equal(1, results.Rows.Count);
            return(results.Rows[0]);
        }
        public void BytesParameter()
        {
            var command = new BigqueryCommand($"SELECT BYTE_LENGTH(@p) AS length")
            {
                Parameters = { { "p", BigqueryParameterType.Bytes, new byte[] { 1, 3 } } }
            };
            var row = GetSingleRow(command);

            Assert.Equal(2, (long)row["length"]);
        }
        public void IntegerArrayParameter()
        {
            var client  = BigqueryClient.Create(_fixture.ProjectId);
            var command = new BigqueryCommand("SELECT value FROM UNNEST([0, 1, 2, 3, 4]) AS value WHERE value IN UNNEST(@p)")
            {
                Parameters = { { "p", BigqueryParameterType.Array, new[] { 1, 3, 5 } } }
            };
            var results = client.ExecuteQuery(command).PollUntilCompleted().GetResultSet(10);

            Assert.Equal(new[] { 1L, 3L }, results.Rows.Select(r => (long)r["value"]));
        }
示例#8
0
        public void ConstructionSample()
        {
            var command = new BigqueryCommand("sql here")
            {
                Parameters = { { BigqueryParameterType.Int64, 10 } }
            };

            Assert.Equal("sql here", command.Sql);
            Assert.Equal(1, command.Parameters.Count);
            Assert.Equal(10, command.Parameters[0].Value);
            Assert.Equal(BigqueryParameterType.Int64, command.Parameters[0].Type);
        }
示例#9
0
        public void PopulateJobConfigurationQuery()
        {
            var jobConfig = new JobConfigurationQuery();
            var command   = new BigqueryCommand("sql here")
            {
                Parameters    = { { BigqueryParameterType.Int64, 10 } },
                ParameterMode = BigqueryParameterMode.Positional
            };

            command.PopulateJobConfigurationQuery(jobConfig);
            Assert.Equal("sql here", jobConfig.Query);
            Assert.Equal("positional", jobConfig.ParameterMode);
            Assert.Equal(1, jobConfig.QueryParameters.Count);
            Assert.Equal("10", jobConfig.QueryParameters[0].ParameterValue.Value);
        }
示例#10
0
        public void PopulateQueryRequest()
        {
            var request = new QueryRequest();
            var command = new BigqueryCommand("sql here")
            {
                Parameters    = { { BigqueryParameterType.Int64, 10 } },
                ParameterMode = BigqueryParameterMode.Positional
            };

            command.PopulateQueryRequest(request);
            Assert.Equal("sql here", request.Query);
            Assert.Equal("positional", request.ParameterMode);
            Assert.Equal(1, request.QueryParameters.Count);
            Assert.Equal("10", request.QueryParameters[0].ParameterValue.Value);
        }
示例#11
0
 /// <summary>
 /// Waits for a query to return a non-empty result set. Some inserts may take a few seconds before the results are visible
 /// via queries - and much longer to show up in ListRows. (It looks like these are inserts with repeated fields and/or record fields.)
 /// </summary>
 private IEnumerable <BigqueryRow> WaitForRows(BigqueryClient client, BigqueryCommand command)
 {
     for (int i = 0; i < 5; i++)
     {
         var rows = client.ExecuteQuery(command)
                    .PollUntilCompleted()
                    .GetRows()
                    .ToList();
         if (rows.Count > 0)
         {
             return(rows);
         }
         Thread.Sleep(1000);
     }
     throw new TimeoutException("Expected rows were not available after 5 seconds");
 }
        public void TimestampParameter()
        {
            var client  = BigqueryClient.Create(_fixture.ProjectId);
            var table   = client.GetTable(_fixture.DatasetId, _fixture.HighScoreTableId);
            var command = new BigqueryCommand($"SELECT score FROM {table} WHERE player=@player AND gameStarted > @start")
            {
                Parameters =
                {
                    { "player", BigqueryParameterType.String,    "Angela"          },
                    { "start",  BigqueryParameterType.Timestamp, new DateTime(2001, 12, 31, 23, 59, 59, DateTimeKind.Utc)},
                }
            };
            // Find the value when we've provided a timestamp smaller than the actual value
            var results = client.ExecuteQuery(command).PollUntilCompleted().GetResultSet(10);

            Assert.Equal(1, results.Rows.Count);

            // We shouldn't find it now. (Angela's game started at 2002-01-01T00:00:00Z)
            command.Parameters[1].Value = new DateTime(2002, 1, 1, 0, 0, 1, DateTimeKind.Utc);
            results = client.ExecuteQuery(command).PollUntilCompleted().GetResultSet(10);
            Assert.Equal(0, results.Rows.Count);
        }
示例#13
0
        public void ParameterModeIsVerified()
        {
            var command = new BigqueryCommand();

            Assert.Throws <ArgumentException>(() => command.ParameterMode = (BigqueryParameterMode)3);
        }