private void DeparseLockingNode(ScriptWriter writer, MySqlLockingNode node)
        {
            if (node.TableLockType == MySqlTableLockType.ShareMode)
            {
                writer.Write("LOCK IN SHARE MODE");
            }
            else
            {
                writer.Write("FOR ");
                writer.Write(node.TableLockType == MySqlTableLockType.Update ? "UPDATE" : "SHARE");

                if (!ListUtility.IsNullOrEmpty(node.Tables))
                {
                    writer.WriteSpace();
                    writer.Write("OF ");
                    writer.WriteJoin(", ", node.Tables);
                }

                if (node.RowLockType.HasValue)
                {
                    writer.WriteSpace();
                    writer.Write(node.RowLockType == MySqlRowLockType.SkipLocked ? "SKIP LOCKED" : "NOWAIT");
                }
            }
        }
        protected override void DeparseDerivedTableNode(ScriptWriter writer, IQsiDerivedTableNode node, QsiScript script)
        {
            base.DeparseDerivedTableNode(writer, node, script);

            if (node is not MySqlDerivedTableNode mysqlNode)
            {
                return;
            }

            if (!mysqlNode.ProcedureAnalyse.IsEmpty)
            {
                var procedureAnalyse = mysqlNode.ProcedureAnalyse.Value;

                writer.WriteSpace();
                writer.Write("PROCEDURE ANALYSE (");
                writer.Write(procedureAnalyse.MaxElements);

                if (procedureAnalyse.MaxMemory.HasValue)
                {
                    writer.Write(", ");
                    writer.Write(procedureAnalyse.MaxMemory.Value);
                }

                writer.Write(')');
            }

            if (mysqlNode.Lockings?.Count > 0)
            {
                writer.WriteSpace();
                writer.WriteJoin(" ", mysqlNode.Lockings, DeparseLockingNode);
            }
        }
Exemple #3
0
        private void DeparseImpalaGroupingExpressionNode(ScriptWriter writer, ImpalaGroupingExpressionNode node, QsiScript script)
        {
            writer.Write("GROUP BY ");

            bool parens = false;

            switch (node.GroupingSetsType)
            {
            case ImpalaGroupingSetsType.Sets:
                writer.Write("GROUPING SETS(");
                parens = true;
                break;

            case ImpalaGroupingSetsType.Cube:
                writer.Write("CUBE(");
                parens = true;
                break;

            case ImpalaGroupingSetsType.Rollup:
                writer.Write("ROLLUP(");
                parens = true;
                break;
            }

            writer.WriteJoin(", ", node.Items, (_, item) => DeparseTreeNode(writer, item, script));

            if (parens)
            {
                writer.Write(')');
            }
        }
Exemple #4
0
        private void DeparseImpalaValuesTableNode(ScriptWriter writer, ImpalaValuesTableNode node, QsiScript script)
        {
            writer.Write("VALUES ");

            writer.WriteJoin(", ", node.Rows, (w, row) =>
            {
                DeparseTreeNode(w, row, script);
            });

            if (!node.Order.IsEmpty)
            {
                writer.WriteSpace();
                DeparseTreeNode(writer, node.Order.Value, script);
            }

            if (!node.Order.IsEmpty)
            {
                writer.WriteSpace();
                DeparseTreeNode(writer, node.Order.Value, script);
            }

            if (!node.Limit.IsEmpty)
            {
                writer.WriteSpace();
                DeparseTreeNode(writer, node.Limit.Value, script);
            }
        }
Exemple #5
0
        private void DeparseHanaTableSerializeBehaviorNode(ScriptWriter writer, HanaTableSerializeBehaviorNode node, QsiScript script)
        {
            writer.Write("FOR ").Write(node.Type == HanaTableSerializeType.Json ? "JSON" : "XML");

            if (node.Options.Count > 0)
            {
                writer.Write(" (");

                writer.WriteJoin(", ", node.Options, (w, n) =>
                {
                    w.Write(IdentifierUtility.Escape(n.Key, EscapeQuotes.Single, EscapeBehavior.TwoTime));
                    w.Write('=');
                    w.Write(IdentifierUtility.Escape(n.Value, EscapeQuotes.Single, EscapeBehavior.TwoTime));
                });

                writer.Write(')');
            }

            if (!string.IsNullOrEmpty(node.ReturnType))
            {
                writer.Write(" RETURNS ").Write(node.ReturnType);
            }
        }
Exemple #6
0
 private void DeparseHanaAssociationExpressionNode(ScriptWriter writer, HanaAssociationExpressionNode node, QsiScript script)
 {
     writer.WriteJoin(".", node.References, (w, r) => DeparseTreeNode(w, r, script));
 }