vmware-archive / database-stream-processor

Streaming and Incremental Computation Framework
Other
222 stars 20 forks source link

[JIT] Jit compiler panic #372

Open mihaibudiu opened 1 year ago

mihaibudiu commented 1 year ago

Yet another kind of panic:

thread 'main' panicked at 'assertion failed: `(left != right)`
  left: `String`,
 right: `String`', crates/dataflow-jit/src/ir/validate.rs:970:17

JSON:

{
  "nodes" : {
    "11797" : {
      "Source" : {
        "layout" : 1,
        "table" : "T"
      }
    },
    "11841" : {
      "Map" : {
        "input" : 11797,
        "map_fn" : {
          "args" : [ {
            "id" : 1,
            "layout" : 1,
            "flags" : "input"
          }, {
            "id" : 2,
            "layout" : 2,
            "flags" : "output"
          } ],
          "ret" : "Unit",
          "entry_block" : 1,
          "blocks" : {
            "1" : {
              "id" : 1,
              "body" : [ [ 3, {
                "Load" : {
                  "source" : 1,
                  "source_layout" : 3,
                  "column" : 3,
                  "column_type" : "String"
                }
              } ], [ 4, {
                "Constant" : {
                  "String" : " "
                }
              } ], [ 5, {
                "Constant" : {
                  "Bool" : false
                }
              } ], [ 6, {
                "BinOp" : {
                  "lhs" : 3,
                  "rhs" : 4,
                  "kind" : "Or",
                  "operand_ty" : "String"
                }
              } ], [ 7, {
                "Load" : {
                  "source" : 1,
                  "source_layout" : 3,
                  "column" : 3,
                  "column_type" : "String"
                }
              } ], [ 8, {
                "Constant" : {
                  "Bool" : false
                }
              } ], [ 9, {
                "BinOp" : {
                  "lhs" : 6,
                  "rhs" : 7,
                  "kind" : "Or",
                  "operand_ty" : "String"
                }
              } ], [ 10, {
                "Store" : {
                  "target" : 2,
                  "target_layout" : 2,
                  "column" : 0,
                  "value" : {
                    "Expr" : 9
                  },
                  "value_type" : "String"
                }
              } ] ],
              "terminator" : {
                "Return" : {
                  "value" : {
                    "Imm" : "Unit"
                  }
                }
              }
            }
          }
        },
        "layout" : 2
      }
    },
    "11843" : {
      "Sink" : {
        "input" : 11841,
        "query" : "CREATE VIEW V AS SELECT T.COL4 || ' ' || T.COL4 FROM T"
      }
    }
  },
  "layouts" : {
    "1" : {
      "columns" : [ {
        "nullable" : false,
        "ty" : "I32"
      }, {
        "nullable" : false,
        "ty" : "F64"
      }, {
        "nullable" : false,
        "ty" : "Bool"
      }, {
        "nullable" : false,
        "ty" : "String"
      }, {
        "nullable" : true,
        "ty" : "I32"
      }, {
        "nullable" : true,
        "ty" : "F64"
      } ]
    },
    "2" : {
      "columns" : [ {
        "nullable" : false,
        "ty" : "String"
      } ]
    },
    "3" : {
      "columns" : [ {
        "nullable" : false,
        "ty" : "I32"
      }, {
        "nullable" : false,
        "ty" : "F64"
      }, {
        "nullable" : false,
        "ty" : "Bool"
      }, {
        "nullable" : false,
        "ty" : "String"
      }, {
        "nullable" : true,
        "ty" : "I32"
      }, {
        "nullable" : true,
        "ty" : "F64"
      } ]
    }
  }
}
Kixiron commented 1 year ago

It's because you're trying to perform logical or on strings which doesn't exist, you probably want to call the @dbsp.str.concat_clone() and @dbsp.str.concat() functions

mihaibudiu commented 1 year ago

Here is am improved JSON program, which causes a different panic, similar to #386

{
  "nodes" : {
    "78" : {
      "Source" : {
        "layout" : 1,
        "table" : "T"
      }
    },
    "123" : {
      "Map" : {
        "input" : 78,
        "map_fn" : {
          "args" : [ {
            "id" : 1,
            "layout" : 1,
            "flags" : "input"
          }, {
            "id" : 2,
            "layout" : 2,
            "flags" : "output"
          } ],
          "ret" : "Unit",
          "entry_block" : 1,
          "blocks" : {
            "1" : {
              "id" : 1,
              "body" : [ [ 3, {
                "Load" : {
                  "source" : 1,
                  "source_layout" : 3,
                  "column" : 3,
                  "column_type" : "String"
                }
              } ], [ 4, {
                "Constant" : {
                  "String" : " "
                }
              } ], [ 5, {
                "Call" : {
                  "function" : "dbsp.str.concat_clone",
                  "args" : [ 3, 4 ],
                  "arg_types" : [ {
                    "Scalar" : "String"
                  }, {
                    "Scalar" : "String"
                  } ],
                  "ret_ty" : "String"
                }
              } ], [ 6, {
                "Load" : {
                  "source" : 1,
                  "source_layout" : 3,
                  "column" : 3,
                  "column_type" : "String"
                }
              } ], [ 7, {
                "Call" : {
                  "function" : "dbsp.str.concat_clone",
                  "args" : [ 5, 6 ],
                  "arg_types" : [ {
                    "Scalar" : "String"
                  }, {
                    "Scalar" : "String"
                  } ],
                  "ret_ty" : "String"
                }
              } ], [ 8, {
                "Store" : {
                  "target" : 2,
                  "target_layout" : 2,
                  "column" : 0,
                  "value" : {
                    "Expr" : 7
                  },
                  "value_type" : "String"
                }
              } ] ],
              "terminator" : {
                "Return" : {
                  "value" : {
                    "Imm" : "Unit"
                  }
                }
              }
            }
          }
        },
        "output_layout" : {
          "Set" : 2
        },
        "input_layout" : {
          "Set" : 1
        }
      }
    },
    "125" : {
      "Sink" : {
        "input" : 123,
        "query" : "CREATE VIEW V AS SELECT T.COL4 || ' ' || T.COL4 FROM T"
      }
    }
  },
  "layouts" : {
    "1" : {
      "columns" : [ {
        "nullable" : false,
        "ty" : "I32"
      }, {
        "nullable" : false,
        "ty" : "F64"
      }, {
        "nullable" : false,
        "ty" : "Bool"
      }, {
        "nullable" : false,
        "ty" : "String"
      }, {
        "nullable" : true,
        "ty" : "I32"
      }, {
        "nullable" : true,
        "ty" : "F64"
      } ]
    },
    "2" : {
      "columns" : [ {
        "nullable" : false,
        "ty" : "String"
      } ]
    },
    "3" : {
      "columns" : [ {
        "nullable" : false,
        "ty" : "I32"
      }, {
        "nullable" : false,
        "ty" : "F64"
      }, {
        "nullable" : false,
        "ty" : "Bool"
      }, {
        "nullable" : false,
        "ty" : "String"
      }, {
        "nullable" : true,
        "ty" : "I32"
      }, {
        "nullable" : true,
        "ty" : "F64"
      } ]
    }
  }
}