Example #1
0
        public override int GetHashCode()
        {
            if (IsVoidType)
            {
                return(-1);
            }

            if (IsFunctionType)
            {
                //Recommended approach in effective java book and java and android docs
                int result = 17;
                result = result * 31 + FunctionReturnType.GetHashCode();
                FunctionParameters.ForEach(p => result = result * 31 + p.GetHashCode());
                return(result);
            }

            if (IsBasicType)
            {
                int result = 17;
                result = result * 31 + RawTypeName.GetHashCode();
                result = result * 31 + PtrIndirectionLevel.GetHashCode();
                ArrayDimensions.ForEach(p => result = result * 31 + p.GetHashCode());
                return(result);
            }

            throw new Exception("Type is not void, basic or a function type");
        }
 public override SqlString Render(IList args, ISessionFactoryImplementor factory)
 {
     return(new SqlStringBuilder()
            .Add("cast('")
            .Add(Name)
            .Add("' as ")
            .Add(FunctionReturnType.SqlTypes(factory)[0].ToString())
            .Add(")")
            .ToSqlString());
 }
Example #3
0
        private bool FunctionTypesCompatable(CType type)
        {
            bool equ = true;

            equ = equ && FunctionReturnType.CompatableWith(type);
            equ = equ && FunctionArgumentTypes.Count == type.FunctionArgumentTypes.Count;

            for (int i = 0; i < FunctionArgumentTypes.Count; i++)
            {
                if (!equ)
                {
                    break;
                }

                equ = FunctionArgumentTypes[i].CompatableWith(type.FunctionArgumentTypes[i]);
            }

            return(equ);
        }
Example #4
0
 public override SqlString Render(IList args, ISessionFactoryImplementor factory)
 {
     return(new SqlString("cast('", Name, "' as ", FunctionReturnType.SqlTypes(factory)[0].ToString(), ")"));
 }
 public override void ExplicitVisit(FunctionReturnType fragment)
 {
     _fragments.Add(fragment);
 }
Example #6
0
        public static List <Field> GetFields(this FunctionReturnType returnType, ILogger logger, SchemaFile file)
        {
            var columns = new List <Field>();

            if (returnType is ScalarFunctionReturnType scalarFunctionReturnType)
            {
                // TODO : name?
                var column = scalarFunctionReturnType.DataType.GetField(null, false, logger, file);
                columns.Add(column);
            }

            if (returnType is TableValuedFunctionReturnType tableValuedFunctionReturnType)
            {
                var tableValuedFunctionColumns = tableValuedFunctionReturnType
                                                 .DeclareTableVariableBody
                                                 .Definition
                                                 .ColumnDefinitions
                                                 .GetFields(logger, file)
                                                 .ToList();

                columns.AddRange(tableValuedFunctionColumns);

                var tableReference = new Table()
                {
                    Columns    = tableValuedFunctionColumns,
                    File       = file,
                    Database   = SchemaObject.TempDb,
                    Schema     = SchemaObject.DefaultSchema,
                    Identifier = tableValuedFunctionReturnType.DeclareTableVariableBody.VariableName.Value,
                };

                var field = new TableReferenceField()
                {
                    Name       = tableValuedFunctionReturnType.DeclareTableVariableBody.VariableName.Value,
                    Type       = FieldType.Table,
                    IsNullable = false,
                    Reference  = tableReference,
                };

                file.FileContext.Variables.Peek().Add(field);
            }

            if (returnType is SelectFunctionReturnType selectFunctionReturnType)
            {
                var tableValuedFunctionColumns = selectFunctionReturnType
                                                 .SelectStatement
                                                 .GetFields(logger, file);

                columns.AddRange(tableValuedFunctionColumns);
            }

            if (!columns.Any())
            {
                logger.Log(LogLevel.Warning,
                           LogType.NotSupportedYet,
                           file.Path,
                           $"Unable to determine return values for a function. \"{returnType.GetType()}\" is not supported yet.");
            }

            return(columns);
        }
 public sealed override void ExplicitVisit(FunctionReturnType node)
 {
     base.ExplicitVisit(node);
 }
 public sealed override void Visit(FunctionReturnType node)
 {
     base.Visit(node);
 }
Example #9
0
 public override void ExplicitVisit(FunctionReturnType node) { this.action(node); }