private void ExplicitVisit_FunctionCall_DATEFROMPARTS(FunctionCall node)
        {
            if (node.Parameters.Count != 3)
            {
                throw new NotSupportedException(node.AsText());
            }

            var invoke_ISNULL = new cs.CodeMethodInvokeExpression(new cs.CodeMethodReferenceExpression()
            {
                MethodName   = "DATEFROMPARTS",
                TargetObject = new cs.CodeTypeReferenceExpression(new cs.CodeTypeReference("KnownSqlFunction"))
            });

            var prm_1 = TryBuildFromNode(node.Parameters[0], ref lastHasError, ref lastError);
            var prm_2 = TryBuildFromNode(node.Parameters[1], ref lastHasError, ref lastError);
            var prm_3 = TryBuildFromNode(node.Parameters[2], ref lastHasError, ref lastError);

            if (!lastHasError)
            {
                invoke_ISNULL.Parameters.Add(prm_1);
                invoke_ISNULL.Parameters.Add(prm_2);
                invoke_ISNULL.Parameters.Add(prm_3);

                lastExpression = invoke_ISNULL;
            }
        }
        private void ExplicitVisit_FunctionCall_OBJECT_NAME(FunctionCall node)
        {
            if (node.Parameters.Count != 1)
            {
                throw new NotSupportedException(node.AsText());
            }

            var invoke_ISNULL = new cs.CodeMethodInvokeExpression(new cs.CodeMethodReferenceExpression()
            {
                MethodName   = "OBJECT_NAME",
                TargetObject = new cs.CodeTypeReferenceExpression(new cs.CodeTypeReference("KnownSqlFunction"))
            });

            var prm_string_expression = TryBuildFromNode(node.Parameters[0], ref lastHasError, ref lastError);

            if (!lastHasError)
            {
                invoke_ISNULL.Parameters.Add(prm_string_expression);
            }

            if (!lastHasError)
            {
                lastExpression = invoke_ISNULL;
            }
        }
        private void ExplicitVisit_FunctionCall_SUBSTRING(FunctionCall node)
        {
            if (node.Parameters.Count != 3)
            {
                throw new NotSupportedException(node.AsText());
            }

            var invoke_ISNULL = new cs.CodeMethodInvokeExpression(new cs.CodeMethodReferenceExpression()
            {
                MethodName   = "SUBSTRING",
                TargetObject = new cs.CodeTypeReferenceExpression(new cs.CodeTypeReference("KnownSqlFunction"))
            });

            var prm_expression        = TryBuildFromNode(node.Parameters[0], ref lastHasError, ref lastError);
            var prm_starting_position = TryBuildFromNode(node.Parameters[1], ref lastHasError, ref lastError);
            var prm_length            = TryBuildFromNode(node.Parameters[2], ref lastHasError, ref lastError);

            if (!lastHasError)
            {
                invoke_ISNULL.Parameters.Add(prm_expression);
            }
            if (!lastHasError)
            {
                invoke_ISNULL.Parameters.Add(prm_starting_position);
            }
            if (!lastHasError)
            {
                invoke_ISNULL.Parameters.Add(prm_length);
            }

            lastExpression = invoke_ISNULL;
        }
        private void ExplicitVisit_FunctionCall_DATEPART(FunctionCall node)
        {
            if (node.Parameters.Count != 2)
            {
                throw new NotSupportedException(node.AsText());
            }

            var invoke_ISNULL = new cs.CodeMethodInvokeExpression(new cs.CodeMethodReferenceExpression()
            {
                MethodName   = "DATEPART",
                TargetObject = new cs.CodeTypeReferenceExpression(new cs.CodeTypeReference("KnownSqlFunction"))
            });

            var prm_interval = TryBuildFromNode(node.Parameters[0], ref lastHasError, ref lastError);

            if (!lastHasError)
            {
                invoke_ISNULL.Parameters.Add(prm_interval);
            }
            var prm_datetimeoffset = TryBuildFromNode(node.Parameters[1], ref lastHasError, ref lastError);

            if (!lastHasError)
            {
                invoke_ISNULL.Parameters.Add(prm_datetimeoffset);
            }

            if (lastHasError)
            {
            }
            else
            {
                lastExpression = invoke_ISNULL;
            }
        }
        private void ExplicitVisit_FunctionCall_CONVERT(FunctionCall node)
        {
            if (node.Parameters.Count != 2)
            {
                throw new NotSupportedException(node.AsText());
            }

            var invoke_ISNULL = new cs.CodeMethodInvokeExpression(new cs.CodeMethodReferenceExpression()
            {
                MethodName   = "CONVERT",
                TargetObject = new cs.CodeTypeReferenceExpression(new cs.CodeTypeReference("KnownSqlFunction"))
            });

            var prm_object_name = TryBuildFromNode(node.Parameters[0], ref lastHasError, ref lastError);
            var prm_object_part = TryBuildFromNode(node.Parameters[1], ref lastHasError, ref lastError);

            if (!lastHasError)
            {
                invoke_ISNULL.Parameters.Add(prm_object_name);
                invoke_ISNULL.Parameters.Add(prm_object_part);

                lastExpression = invoke_ISNULL;
            }
        }