public static IGremlinQuerySerializerBuilder UseCosmosDbWorkarounds(this IGremlinQuerySerializerBuilder builder)
        {
            return(builder
                   .OverrideAtomSerializationHandler <SkipStep>((step, assembler, overridden, recurse) => recurse(new RangeStep(step.Count, -1)))
                   .OverrideAtomSerializationHandler <NoneStep>((step, assembler, overridden, recurse) => recurse(NoneWorkaround))
                   .OverrideAtomSerializationHandler <LimitStep>((step, assembler, overridden, recurse) =>
            {
                // Workaround for https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/33998623-cosmosdb-s-implementation-of-the-tinkerpop-dsl-has
                if (step.Count > int.MaxValue)
                {
                    throw new ArgumentOutOfRangeException(nameof(step), "CosmosDb doesn't currently support values for 'Limit' outside the range of a 32-bit-integer.");
                }

                overridden(step);
            })
                   .OverrideAtomSerializationHandler <TailStep>((step, assembler, overridden, recurse) =>
            {
                // Workaround for https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/33998623-cosmosdb-s-implementation-of-the-tinkerpop-dsl-has
                if (step.Count > int.MaxValue)
                {
                    throw new ArgumentOutOfRangeException(nameof(step), "CosmosDb doesn't currently support values for 'Tail' outside the range of a 32-bit-integer.");
                }

                overridden(step);
            })
                   .OverrideAtomSerializationHandler <RangeStep>((step, assembler, overridden, recurse) =>
            {
                // Workaround for https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/33998623-cosmosdb-s-implementation-of-the-tinkerpop-dsl-has
                if (step.Lower > int.MaxValue || step.Upper > int.MaxValue)
                {
                    throw new ArgumentOutOfRangeException(nameof(step), "CosmosDb doesn't currently support values for 'Range' outside the range of a 32-bit-integer.");
                }

                overridden(step);
            })
                   .OverrideAtomSerializationHandler <long>((l, assembler, overridden, recurse) =>
            {
                // Workaround for https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/33998623-cosmosdb-s-implementation-of-the-tinkerpop-dsl-has
                recurse((int)l);
            }));
        }
Exemplo n.º 2
0
        public static IGremlinQuerySerializerBuilder UseDefaultGremlinStepSerializationHandlers(this IGremlinQuerySerializerBuilder builder)
        {
            return(builder
                   .OverrideAtomSerializationHandler <HasNotStep>((step, assembler, overridden, recurse) => assembler.Method("hasNot", step.Key, recurse))
                   .OverrideAtomSerializationHandler <ChooseOptionTraversalStep>((step, assembler, overridden, recurse) => assembler.Method("choose", step.Traversal, recurse))
                   .OverrideAtomSerializationHandler <OptionTraversalStep>((step, assembler, overridden, recurse) => assembler.Method("option", step.Guard, step.OptionTraversal, recurse))
                   .OverrideAtomSerializationHandler <WithoutStrategiesStep>((step, assembler, overridden, recurse) =>
            {
                assembler.OpenMethod("withoutStrategies");

                foreach (var className in step.ClassNames)
                {
                    assembler.StartParameter();
                    assembler.Identifier(className);
                    assembler.EndParameter();
                }

                assembler.CloseMethod();
            })
                   .OverrideAtomSerializationHandler <HasStep>((step, assembler, overridden, recurse) =>
            {
                if (step.Value is P p1 && p1.EqualsConstant(false))
                {
                    recurse(NoneStep.Instance);
                }
Exemplo n.º 3
0
 public static IGremlinQuerySerializerBuilder UseGroovy(this IGremlinQuerySerializerBuilder builder)
 {
     return(builder
            .ConfigureAssemblerFactory(_ => SerializedGremlinQueryAssemblerFactory.Groovy));
 }