Add code to show join rule (for outer and IN joins) in join type name.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Feb 2003 17:06:23 +0000 (17:06 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Feb 2003 17:06:23 +0000 (17:06 +0000)
src/backend/commands/explain.c

index a816036693a22bf62258827a5a284373476d43b2..8bc39884b43dc53651d43e1d9b68ba9ca600f185 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994-5, Regents of the University of California
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.102 2003/02/09 06:56:26 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.103 2003/02/10 17:06:23 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -308,13 +308,73 @@ explain_outNode(StringInfo str,
                        pname = "Append";
                        break;
                case T_NestLoop:
-                       pname = "Nested Loop";
+                       switch (((NestLoop *) plan)->join.jointype)
+                       {
+                               case JOIN_INNER:
+                                       pname = "Nested Loop";
+                                       break;
+                               case JOIN_LEFT:
+                                       pname = "Nested Loop Left Join";
+                                       break;
+                               case JOIN_FULL:
+                                       pname = "Nested Loop Full Join";
+                                       break;
+                               case JOIN_RIGHT:
+                                       pname = "Nested Loop Right Join";
+                                       break;
+                               case JOIN_IN:
+                                       pname = "Nested Loop IN Join";
+                                       break;
+                               default:
+                                       pname = "Nested Loop ??? Join";
+                                       break;
+                       }
                        break;
                case T_MergeJoin:
-                       pname = "Merge Join";
+                       switch (((MergeJoin *) plan)->join.jointype)
+                       {
+                               case JOIN_INNER:
+                                       pname = "Merge Join";
+                                       break;
+                               case JOIN_LEFT:
+                                       pname = "Merge Left Join";
+                                       break;
+                               case JOIN_FULL:
+                                       pname = "Merge Full Join";
+                                       break;
+                               case JOIN_RIGHT:
+                                       pname = "Merge Right Join";
+                                       break;
+                               case JOIN_IN:
+                                       pname = "Merge IN Join";
+                                       break;
+                               default:
+                                       pname = "Merge ??? Join";
+                                       break;
+                       }
                        break;
                case T_HashJoin:
-                       pname = "Hash Join";
+                       switch (((HashJoin *) plan)->join.jointype)
+                       {
+                               case JOIN_INNER:
+                                       pname = "Hash Join";
+                                       break;
+                               case JOIN_LEFT:
+                                       pname = "Hash Left Join";
+                                       break;
+                               case JOIN_FULL:
+                                       pname = "Hash Full Join";
+                                       break;
+                               case JOIN_RIGHT:
+                                       pname = "Hash Right Join";
+                                       break;
+                               case JOIN_IN:
+                                       pname = "Hash IN Join";
+                                       break;
+                               default:
+                                       pname = "Hash ??? Join";
+                                       break;
+                       }
                        break;
                case T_SeqScan:
                        pname = "Seq Scan";