예제 #1
0
 private static void AddFindCode(IFunctionBuilder functionBuilder, ITypeReference outputType)
 {
     if (outputType.GetUnderlyingType() == typeof(string))
     {
         AddFindCodeAsString(functionBuilder);
     }
     else
     {
         AddFindCode(functionBuilder, functionBuilder.GetTypeName(outputType));
     }
 }
예제 #2
0
 private static void GenerateMapReduceCode(IFunctionBuilder functionBuilder, ITypeReference outputTypeReference)
 {
     if (outputTypeReference.GetUnderlyingType() == typeof(string))
     {
         GenerateMapReduceCodeAsString(functionBuilder);
     }
     else
     {
         GenerateMapReduceCode(functionBuilder, functionBuilder.GetTypeName(outputTypeReference));
     }
 }
예제 #3
0
 public static DataType ParseDataType(ITypeReference typeReference)
 {
     if (typeReference.IsList)
     {
         if (typeReference.GetEnumerableContentType().GetUnderlyingType() == typeof(byte))
         {
             return(DataType.Binary);
         }
         throw new Exception(string.Format("Type not mapped: {0}.", typeReference));
     }
     return(ParseDataType(typeReference.GetUnderlyingType()));
 }
예제 #4
0
        public override void GenerateCode(IFunctionBuilder functionBuilder)
        {
            IPropertyData opProp           = FunctionData.Properties[MongoDBWriteShared.Names.Operation];
            var           Operation        = FunctionData.Properties[MongoDBWriteShared.Names.Operation].GetValue <MongoDBWriteOperation>();
            var           InsertIfNotFound = FunctionData.Properties[MongoDBWriteShared.Names.InsertIfNotFound].GetValue <bool>();
            string        operation        = "";
            var           updateOperation  = functionBuilder.GetParamName(MongoDBWriteShared.Names.UpdateOperation);
            var           connectionString = functionBuilder.GetParamName(MongoDBWriteShared.Names.ConnectionString);

            ITypeReference dataTypeReference = functionBuilder.GetTypeReference(
                FunctionData.Properties[MongoDBWriteShared.Names.Data].Value
                );

            string dataType = functionBuilder.GetTypeName(dataTypeReference);

            if (!dataTypeReference.IsGenerated && dataTypeReference.IsCompiled)
            {
                functionBuilder.AddAssemblyReference(dataTypeReference.GetUnderlyingType());
            }

            MongoDBCodeGenerator.CompileExpression(functionBuilder,
                                                   FunctionData,
                                                   MongoDBWriteShared.Names.UpdateOperation,
                                                   MongoDBWriteShared.Names.UpdateOperationExpressions
                                                   );

            MongoDBCodeGenerator.CompileExpression(functionBuilder,
                                                   FunctionData,
                                                   MongoDBWriteShared.Names.Criteria,
                                                   MongoDBWriteShared.Names.CriteriaExpressions
                                                   );

            switch (Operation)
            {
            case MongoDBWriteOperation.DeleteAll:
                operation = "DeleteAll(Collection);";
                break;

            case MongoDBWriteOperation.Delete:
                operation = "Delete(Collection, Criteria);";
                break;

            case MongoDBWriteOperation.Update:
                operation = "Update(Collection, Criteria, " + updateOperation + ", " + (InsertIfNotFound ? "true" : "false") + ");";
                break;

            case MongoDBWriteOperation.Replace:
                operation = "Replace(Collection, Criteria, (" + dataType + ")Data, " + (InsertIfNotFound ? "true" : "false") + ");";
                break;

            case MongoDBWriteOperation.Insert:
            default:
                operation = "Insert(Collection, (" + dataType + ")Data);";
                break;
            }

            functionBuilder.AddAssemblyReference(typeof(MongoDBX));
            functionBuilder.AddAssemblyReference(typeof(SqlStringHandler));
            functionBuilder.AddCode(String.Format(
                                        @"using (var mongoX = new Twenty57.Linx.Components.MongoDB.MongoDBX({0})){{
						mongoX.LogEvent += message => {1}.Log(message);
						mongoX.{2}
					}}"                    , connectionString, functionBuilder.ContextParamName, operation));
        }
예제 #5
0
 public static string GetCodeStringForType(ITypeReference typeReference)
 {
     return(typeReference.IsList ? "System.Collections.Generic.List<" + typeReference.GetEnumerableContentType().GetUnderlyingType() + ">" : typeReference.GetUnderlyingType().ToString());
 }