Exemplo n.º 1
0
        private static IEnumerable <CdPath> ExploreTableDescriptors(this IEnumerable <SyntaxTree> fileNodes)
        {
            foreach (var nodePath in fileNodes)
            {
                var classes = nodePath.GetRoot()
                              .DescendantNodesAndSelf()
                              .OfType <ClassDeclarationSyntax>()
                              .Select(cd => (Class: cd, BaseTypeKind: SyntaxHelpers.GetTableClassKind(cd)))
                              .Where(p => p.BaseTypeKind != null);

                foreach (var tuple in classes)
                {
                    ConstructorInitializerSyntax?baseConstCall = tuple.Class
                                                                 .DescendantNodes()
                                                                 .OfType <ConstructorInitializerSyntax>()
                                                                 .FirstOrDefault(c =>
                                                                                 c.Kind() == SyntaxKind.BaseConstructorInitializer);

                    BaseTypeKindTag baseTypeKindTag = tuple.BaseTypeKind !.Value;

                    if (baseTypeKindTag == BaseTypeKindTag.DerivedTableBase)
                    {
                        yield return(new CdPath(tuple.Class, baseTypeKindTag, null));
                    }
                    else if (baseConstCall != null)
                    {
                        string schema;
                        string tableName;

                        if (baseTypeKindTag == BaseTypeKindTag.TableBase)
                        {
                            if (baseConstCall.ArgumentList.Arguments.Count != 3)
                            {
                                continue;
                            }

                            if (baseConstCall.ArgumentList.Arguments[0].Expression is LiteralExpressionSyntax slSh &&
                                slSh.Kind() == SyntaxKind.StringLiteralExpression)
                            {
                                schema = slSh.Token.ValueText;
                            }
                            else
                            {
                                continue;
                            }

                            if (baseConstCall.ArgumentList.Arguments[1].Expression is LiteralExpressionSyntax slDb &&
                                slDb.Kind() == SyntaxKind.StringLiteralExpression)
                            {
                                tableName = slDb.Token.ValueText;
                            }
                            else
                            {
                                continue;
                            }
                        }
Exemplo n.º 2
0
        public static TRes Switch <TRes>(this BaseTypeKindTag tag, TRes tableBaseRes, TRes tempTableBaseRes, TRes derivedTableBaseRes)
        {
            switch (tag)
            {
            case BaseTypeKindTag.TableBase:
                return(tableBaseRes);

            case BaseTypeKindTag.TempTableBase:
                return(tempTableBaseRes);

            case BaseTypeKindTag.DerivedTableBase:
                return(derivedTableBaseRes);

            default:
                throw new ArgumentOutOfRangeException(nameof(tag), tag, null);
            }
        }
Exemplo n.º 3
0
 public SqModelTableRef(string tableTypeName, string tableTypeNameSpace, BaseTypeKindTag baseTypeKindTag)
 {
     this.TableTypeName      = tableTypeName;
     this.TableTypeNameSpace = tableTypeNameSpace;
     this.BaseTypeKindTag    = baseTypeKindTag;
 }
Exemplo n.º 4
0
 public SqModelMetaRaw(string modelName, string fieldName, string fieldTypeName, string?castTypeName, string tableNamespace, string tableName, string columnName, bool isPrimaryKey, bool isIdentity, BaseTypeKindTag baseTypeKindTag)
 {
     this.ModelName       = modelName;
     this.FieldName       = fieldName;
     this.FieldTypeName   = fieldTypeName;
     this.CastTypeName    = castTypeName;
     this.TableNamespace  = tableNamespace;
     this.TableName       = tableName;
     this.ColumnName      = columnName;
     this.IsPrimaryKey    = isPrimaryKey;
     this.IsIdentity      = isIdentity;
     this.BaseTypeKindTag = baseTypeKindTag;
 }