DataStax C ++ Cassandra嵌套UDT

时间:2017-08-22 20:51:14

标签: c++ cassandra nested datastax user-defined-types

在DataStax C ++驱动程序中,我尝试将用户类型设置为另一个用户类型(嵌套UDT)。

但是,由于某种原因,我在尝试使用其他用户定义类型设置用户定义类型的字段时出错。

private readonly HttpClient _client;
public async Task<SsoResponse> AuthenticateAsync(string code)
        {
            if (string.IsNullOrEmpty(code))
                throw new ArgumentNullException("Authentication code is null or empty");

            // Build the link to the SSO we will be using.
            var builder = new UriBuilder(_settings.BaseUrl)
            {
                Path = _settings.TokenPath,
                Query = $"grant_type=authorization_code&code={code}"
            };

            var request = new HttpRequestMessage()
            {
                RequestUri = builder.Uri,
                Method = HttpMethod.Post
            };

            // Set the necessary headers
            request.Headers.Add("Authorization", $"{TokenType.Basic} {_authorizationString}");
            request.Headers.Add("Host", builder.Host);
            request.Headers.Add("User-Agent", _userAgent);

            return await CallSsoAsync<SsoResponse>(request);
        }

private async Task<T> CallSsoAsync<T>(HttpRequestMessage request)
        {
            T response = default(T);
            using (HttpResponseMessage resp = await _client.SendAsync(request))
            {
                // Check whether the SSO answered with 
                // a positive HTTP Status Code
                if (resp.IsSuccessStatusCode)
                {
                    // Deserialize the object into the response model
                    // which will be returned to the application
                    response = JsonConvert.DeserializeObject<T>(await resp.Content.ReadAsStringAsync());
                }
                else
                {
                    // Invalid code receieved, inform the user
                    throw new Exception("The SSO responded with a bad status code: " + resp.StatusCode);
                }
            }

            return response;
        }

有谁知道为什么会这样? Cassandra本身似乎允许嵌套UDT。

  • 我是如何设置UDT字段的?
  • 在C ++驱动程序中嵌套UDT是不可能的?如果是这种情况,函数 cass_user_type_set_user_type()会是什么?

1 个答案:

答案 0 :(得分:0)

我改变了上面的内容,改为从Cassandra模式中获取用户定义的类型。我原来的问题涉及使用这种类型。

问题最终成为区分大小写的问题。

出于某种原因,DataStax C ++驱动程序中的某些调用区分大小写,例如 cass_keyspace_meta_user_type_by_name ,而某些调用不是 cass_user_type_set_user_type_by_name

DataStax C ++确实允许嵌套UDT。在Cassandra中定义它们时要小心它们的名字。