@@ -84,12 +84,12 @@ private SqlExpression<T> InternalJoin<Source, Target>(string joinType,
8484 return InternalJoin ( joinType , joinExpr , sourceDef , targetDef ) ;
8585 }
8686
87- private string InternalCreateSqlFromExpression ( Expression joinExpr )
87+ private string InternalCreateSqlFromExpression ( Expression joinExpr , bool isCrossJoin )
8888 {
89- return "ON {0}" . Fmt ( Visit ( joinExpr ) . ToString ( ) ) ;
89+ return "{0} {1} " . Fmt ( ( isCrossJoin ? "WHERE" : "ON" ) , Visit ( joinExpr ) . ToString ( ) ) ;
9090 }
9191
92- private string InternalCreateSqlFromDefinitions ( ModelDefinition sourceDef , ModelDefinition targetDef , bool allowMissingOnClause )
92+ private string InternalCreateSqlFromDefinitions ( ModelDefinition sourceDef , ModelDefinition targetDef , bool isCrossJoin )
9393 {
9494 var parentDef = sourceDef ;
9595 var childDef = targetDef ;
@@ -104,13 +104,14 @@ private string InternalCreateSqlFromDefinitions(ModelDefinition sourceDef, Model
104104
105105 if ( refField == null )
106106 {
107- if ( ! allowMissingOnClause )
107+ if ( ! isCrossJoin )
108108 throw new ArgumentException ( "Could not infer relationship between {0} and {1}" . Fmt ( sourceDef . ModelName , targetDef . ModelName ) ) ;
109109
110110 return string . Empty ;
111111 }
112112
113- return "ON\n ({0}.{1} = {2}.{3})" . Fmt (
113+ return "{0}\n ({1}.{2} = {3}.{4})" . Fmt (
114+ isCrossJoin ? "WHERE" : "ON" ,
114115 DialectProvider . GetQuotedTableName ( parentDef ) ,
115116 SqlColumn ( parentDef . PrimaryKey . FieldName ) ,
116117 DialectProvider . GetQuotedTableName ( childDef ) ,
@@ -126,9 +127,10 @@ private SqlExpression<T> InternalJoin(string joinType,
126127 useFieldName = true ;
127128 sep = " " ;
128129
130+ var isCrossJoin = "CROSS JOIN" . Equals ( joinType ) ;
129131 var sqlExpr = joinExpr != null
130- ? InternalCreateSqlFromExpression ( joinExpr )
131- : InternalCreateSqlFromDefinitions ( sourceDef , targetDef , "CROSS JOIN" . Equals ( joinType ) ) ;
132+ ? InternalCreateSqlFromExpression ( joinExpr , isCrossJoin )
133+ : InternalCreateSqlFromDefinitions ( sourceDef , targetDef , isCrossJoin ) ;
132134
133135 var joinDef = tableDefs . Contains ( targetDef ) && ! tableDefs . Contains ( sourceDef )
134136 ? sourceDef
0 commit comments