private Task <PreparedStatement> SetPrepareTableInfo(PreparedStatement ps)
        {
            const string msgRoutingNotSet = "Routing information could not be set for query \"{0}\"";
            var          column           = ps.Metadata.Columns.FirstOrDefault();

            if (column == null || column.Keyspace == null)
            {
                //The prepared statement does not contain parameters
                return(TaskHelper.ToTask(ps));
            }
            if (ps.Metadata.PartitionKeys != null)
            {
                //The routing indexes where parsed in the prepared response
                if (ps.Metadata.PartitionKeys.Length == 0)
                {
                    //zero-length partition keys means that none of the parameters are partition keys
                    //the partition key is hard-coded.
                    return(TaskHelper.ToTask(ps));
                }
                ps.RoutingIndexes = ps.Metadata.PartitionKeys;
                return(TaskHelper.ToTask(ps));
            }
            return(Cluster.Metadata.GetTableAsync(column.Keyspace, column.Table).ContinueWith(t =>
            {
                if (t.Exception != null)
                {
                    Logger.Error("There was an error while trying to retrieve table metadata for {0}.{1}. {2}", column.Keyspace, column.Table, t.Exception.InnerException);
                    return ps;
                }
                var table = t.Result;
                if (table == null)
                {
                    Logger.Info(msgRoutingNotSet, ps.Cql);
                    return ps;
                }
                var routingSet = ps.SetPartitionKeys(table.PartitionKeys);
                if (!routingSet)
                {
                    Logger.Info(msgRoutingNotSet, ps.Cql);
                }
                return ps;
            }));
        }
Beispiel #2
0
        private async Task SetPrepareTableInfo(PreparedStatement ps)
        {
            const string msgRoutingNotSet = "Routing information could not be set for query \"{0}\"";
            var          column           = ps.Metadata.Columns.FirstOrDefault();

            if (column == null || column.Keyspace == null)
            {
                // The prepared statement does not contain parameters
                return;
            }
            if (ps.Metadata.PartitionKeys != null)
            {
                //The routing indexes where parsed in the prepared response
                if (ps.Metadata.PartitionKeys.Length == 0)
                {
                    // zero-length partition keys means that none of the parameters are partition keys
                    // the partition key is hard-coded.
                    return;
                }
                ps.RoutingIndexes = ps.Metadata.PartitionKeys;
                return;
            }
            try
            {
                var table = await Cluster.Metadata.GetTableAsync(column.Keyspace, column.Table).ConfigureAwait(false);

                if (table == null)
                {
                    Logger.Info(msgRoutingNotSet, ps.Cql);
                    return;
                }
                var routingSet = ps.SetPartitionKeys(table.PartitionKeys);
                if (!routingSet)
                {
                    Logger.Info(msgRoutingNotSet, ps.Cql);
                }
            }
            catch (Exception ex)
            {
                Logger.Error("There was an error while trying to retrieve table metadata for {0}.{1}. {2}",
                             column.Keyspace, column.Table, ex.InnerException);
            }
        }
Beispiel #3
0
 private Task<PreparedStatement> SetPrepareTableInfo(PreparedStatement ps)
 {
     const string msgRoutingNotSet = "Routing information could not be set for query \"{0}\"";
     var column = ps.Metadata.Columns.FirstOrDefault();
     if (column == null || column.Keyspace == null)
     {
         //The prepared statement does not contain parameters
         return TaskHelper.ToTask(ps);
     }
     if (ps.Metadata.PartitionKeys != null)
     {
         //The routing indexes where parsed in the prepared response
         if (ps.Metadata.PartitionKeys.Length == 0)
         {
             //zero-length partition keys means that none of the parameters are partition keys
             //the partition key is hard-coded.
             return TaskHelper.ToTask(ps);
         }
         ps.RoutingIndexes = ps.Metadata.PartitionKeys;
         return TaskHelper.ToTask(ps);
     }
     return Cluster.Metadata.GetTableAsync(column.Keyspace, column.Table).ContinueWith(t =>
     {
         if (t.Exception != null)
         {
             Logger.Error("There was an error while trying to retrieve table metadata for {0}.{1}. {2}", column.Keyspace, column.Table, t.Exception.InnerException);
             return ps;
         }
         var table = t.Result;
         if (table == null)
         {
             Logger.Info(msgRoutingNotSet, ps.Cql);
             return ps;
         }
         var routingSet = ps.SetPartitionKeys(table.PartitionKeys);
         if (!routingSet)
         {
             Logger.Info(msgRoutingNotSet, ps.Cql);
         }
         return ps;
     });
 }