Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit ffadd72

Browse files
committed
Reset originalLambda expression on new Join Expression
1 parent 1b348b7 commit ffadd72

File tree

2 files changed

+252
-3
lines changed

2 files changed

+252
-3
lines changed

src/ServiceStack.OrmLite/Expressions/SqlExpression.Join.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,7 @@ protected virtual SqlExpression<T> InternalJoin(string joinType, Expression join
209209
{
210210
PrefixFieldWithTableName = true;
211211

212-
//Changes how Sql Expressions are generated.
213-
useFieldName = true;
214-
sep = " ";
212+
Reset();
215213

216214
var joinFormat = options?.JoinFormat;
217215
if (options?.Alias != null) //Set joinAlias

tests/ServiceStack.OrmLite.Tests/Issues/LRAIssues.cs

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,127 @@ private static void DropTables(IDbConnection db)
212212
db.DropTable<LRDLaboratorio>();
213213
db.DropTable<LRARisultato>();
214214
}
215+
216+
private static void InitAliasTables(IDbConnection db)
217+
{
218+
OrmLiteUtils.PrintSql();
219+
db.DropTable<LRDProfiloAnalisi>();
220+
db.DropTable<LRDAnalisi>();
221+
db.DropTable<LRDContenitore>();
222+
223+
db.CreateTable<LRDContenitore>();
224+
db.CreateTable<LRDAnalisi>();
225+
db.CreateTable<LRDProfiloAnalisi>();
226+
227+
db.Insert(new LRDAnalisi
228+
{
229+
Codice = "TEST",
230+
Descrizione = "DESCRIPTION"
231+
});
232+
233+
db.Insert(new LRDProfiloAnalisi
234+
{
235+
AnalisiId = 1,
236+
DataModifica = DateTime.UtcNow,
237+
VersioneRecord = 1,
238+
ProfiloAnalisiId = null
239+
});
240+
241+
}
242+
243+
[Test]
244+
public void Table_Alias()
245+
{
246+
using (var db = OpenDbConnection())
247+
{
248+
InitAliasTables(db);
249+
250+
var q = db.From<LRDAnalisi>(db.TableAlias("dana"))
251+
.Join<LRDAnalisi, LRDContenitore>((dana, dcont) => dana.ContenitoreId == dcont.Id, db.TableAlias("c"))
252+
.Join<LRDAnalisi, LRDProfiloAnalisi>((dana, dprofana) => dana.Id == dprofana.AnalisiId, db.TableAlias("dprofana"))
253+
.Where<LRDProfiloAnalisi>(dprofana => Sql.TableAlias(dprofana.ProfiloAnalisiId, "dprofana") == null)
254+
.SelectDistinct<LRDAnalisi, LRDProfiloAnalisi, LRDContenitore>((dana, dprofana, dcont) =>
255+
new //ProfiloAnalisiDTO
256+
{
257+
Id = Sql.TableAlias(dprofana.Id, "dprofana"),
258+
AnalisiId = dana.Id,
259+
Codice = dana.Codice,
260+
Descrizione = dana.Descrizione,
261+
ContenitoreId = Sql.TableAlias(dcont.Id, "c"),
262+
ContenitoreCodice = Sql.TableAlias(dcont.Codice, "c"),
263+
ContenitoreDescrizione = Sql.TableAlias(dcont.Descrizione, "c"),
264+
VersioneRecord = Sql.TableAlias(dprofana.VersioneRecord, "dprofana")
265+
});
266+
267+
var result = db.Select<ProfiloAnalisiDTO>(q);
268+
}
269+
}
270+
271+
[Test]
272+
public void Join_Alias()
273+
{
274+
using (var db = OpenDbConnection())
275+
{
276+
InitAliasTables(db);
277+
278+
var q = db.From<LRDAnalisi>()
279+
.Join<LRDAnalisi, LRDContenitore>((dana, dcont) => dana.ContenitoreId == dcont.Id, db.JoinAlias("c"))
280+
.Join<LRDAnalisi, LRDProfiloAnalisi>((dana, dprofana) => dana.Id == dprofana.AnalisiId, db.JoinAlias("dprofana"))
281+
.Where<LRDProfiloAnalisi>(dprofana => Sql.JoinAlias(dprofana.ProfiloAnalisiId, "dprofana") == null)
282+
.SelectDistinct<LRDAnalisi, LRDProfiloAnalisi, LRDContenitore>((dana, dprofana, dcont) =>
283+
new //ProfiloAnalisiDTO
284+
{
285+
Id = Sql.JoinAlias(dprofana.Id, "dprofana"),
286+
AnalisiId = dana.Id,
287+
Codice = dana.Codice,
288+
Descrizione = dana.Descrizione,
289+
ContenitoreId = Sql.JoinAlias(dcont.Id, "c"),
290+
ContenitoreCodice = Sql.JoinAlias(dcont.Codice, "c"),
291+
ContenitoreDescrizione = Sql.JoinAlias(dcont.Descrizione, "c"),
292+
VersioneRecord = Sql.JoinAlias(dprofana.VersioneRecord, "dprofana")
293+
});
294+
295+
var result = db.Select<ProfiloAnalisiDTO>(q);
296+
}
297+
}
298+
}
299+
300+
public class ElementoProfiloAnalisiDTO
301+
{
302+
public int Id { get; set; }
303+
304+
public int ProfiloAnalisiId { get; set; }
305+
306+
public int AnalisiId { get; set; }
307+
308+
public string CodiceAnalisi { get; set; }
309+
310+
public string DescrizioneAnalisi { get; set; }
311+
312+
public int VersioneRecord { get; set; }
313+
}
314+
315+
public class ProfiloAnalisiDTO
316+
{
317+
public int Id { get; set; }
318+
319+
public string Codice { get; set; }
320+
321+
public string Descrizione { get; set; }
322+
323+
public int ContenitoreId { get; set; }
324+
325+
public string ContenitoreCodice { get; set; }
326+
327+
public string ContenitoreDescrizione { get; set; }
328+
329+
public int VersioneRecord { get; set; }
330+
331+
public int AnalisiId { get; set; }
332+
333+
public IEnumerable<ElementoProfiloAnalisiDTO> Elementi { get; set; }
215334
}
335+
216336

217337
public class DBObject : ICloneable
218338
{
@@ -971,4 +1091,135 @@ public class LRARisultato : DBObject, IHasId<int>
9711091
[Alias("ADELTARISULTATOPRECEDENTEID")]
9721092
public int? DeltaRisultatoPrecedenteId { get; set; }
9731093
}
1094+
1095+
[Alias("LRDPROFILOANALISI")]
1096+
[CompositeIndex("DPROFILOANALISIID", "DANALISIID", Unique = true, Name = "IDXPROFILO")]
1097+
public class LRDProfiloAnalisi : DBObject, IHasId<int>
1098+
{
1099+
[Alias("IDDPROFILOANALISI")]
1100+
[AutoIncrement]
1101+
[PrimaryKey]
1102+
public int Id { get; set; }
1103+
1104+
[ApiMember(Description = "Analisi profilo a cui appartiene l'analisi")]
1105+
[Alias("DPROFILOANALISIID")]
1106+
[References(typeof(LRDProfiloAnalisi))]
1107+
public int? ProfiloAnalisiId { get; set; } // dove NULL allora DANALISIID e' l'analisi profilo
1108+
1109+
[ApiMember(Description = "Analisi dal dizionario")]
1110+
[Alias("DANALISIID")]
1111+
[References(typeof(LRDAnalisi))]
1112+
public int AnalisiId { get; set; }
1113+
}
1114+
1115+
[Alias("LRDCONTENITORI")]
1116+
public class LRDContenitore : DBObject, IHasId<int>
1117+
{
1118+
private const int CColore = 7; // lunghezza colore HTML es. #AABBCC
1119+
private const int CPrefisso = 5;
1120+
1121+
[Alias("IDDCONTENITORE")]
1122+
[AutoIncrement]
1123+
[PrimaryKey]
1124+
public int Id { get; set; }
1125+
1126+
[Alias("CODICE")]
1127+
[Required]
1128+
[Index(Unique = true)]
1129+
public string Codice { get; set; }
1130+
1131+
[Required]
1132+
[Alias("DESCRIZIONE")]
1133+
public string Descrizione { get; set; }
1134+
1135+
[Alias("DESCRIZIONEESTESA")]
1136+
public string DescrizioneEstesa { get; set; }
1137+
1138+
[Alias("ORDINE")]
1139+
[Required]
1140+
public int Ordine { get; set; }
1141+
1142+
[Required]
1143+
[Alias("TIPOCONTENITORE")]
1144+
public int TipoContenitore { get; set; }
1145+
1146+
[Alias("COLORE")]
1147+
[StringLength(CColore)]
1148+
public string Colore { get; set; }
1149+
1150+
[Alias("PREFISSO")]
1151+
[StringLength(CPrefisso)]
1152+
public string Prefisso { get; set; }
1153+
1154+
[Alias("PROGRESSIVOBARCODEMIN")]
1155+
[DecimalLength(30, 0)]
1156+
public decimal ProgressivoBarcodeMin { get; set; }
1157+
1158+
[Alias("PROGRESSIVOBARCODEMAX")]
1159+
[DecimalLength(30, 0)]
1160+
[Default(int.MaxValue)]
1161+
public decimal ProgressivoBarcodeMax { get; set; }
1162+
1163+
[Alias("DMATERIALEID")]
1164+
public int? MaterialeId { get; set; }
1165+
1166+
[Alias("DETICHETTAID")]
1167+
public int? EtichettaId { get; set; }
1168+
1169+
[Required]
1170+
[Alias("EMATOLOGIA")]
1171+
public int Ematologia { get; set; }
1172+
1173+
[Required]
1174+
[Alias("URINE")]
1175+
public int Urine { get; set; }
1176+
}
1177+
1178+
[Alias("LRDANALISI")]
1179+
public class LRDAnalisi : DBObject, IHasId<int>
1180+
{
1181+
[Alias("IDDANALISI")]
1182+
[AutoIncrement]
1183+
[PrimaryKey]
1184+
public int Id { get; set; }
1185+
1186+
[Alias("CODICE")]
1187+
[Required]
1188+
[Index(Unique = true)]
1189+
public string Codice { get; set; }
1190+
1191+
[Alias("DESCRIZIONE")]
1192+
[Required]
1193+
public string Descrizione { get; set; }
1194+
1195+
[Alias("DESCRIZIONEESTESA")]
1196+
public string DescrizioneEstesa { get; set; }
1197+
1198+
[Alias("CODICEREGIONALE")]
1199+
public string CodiceRegionale { get; set; }
1200+
1201+
[Alias("DCONTENITOREID")]
1202+
public int ContenitoreId { get; set; }
1203+
1204+
[Alias("ORDINE")]
1205+
public int Ordine { get; set; }
1206+
1207+
[Alias("DMETODOID")]
1208+
public int? MetodoId { get; set; }
1209+
1210+
[Alias("DPANNELLOANALISIID")]
1211+
public int? PannelloAnalisiId { get; set; }
1212+
1213+
[Alias("DCLASSEANALISIID")]
1214+
public int? ClasseAnalisiId { get; set; }
1215+
1216+
[Alias("QCREGISTRAZIONERISULTATI")]
1217+
public int QCRegistrazioneRisultati { get; set; }
1218+
1219+
[Alias("QCVERIFICA")]
1220+
public int QCVerifica { get; set; }
1221+
1222+
[Alias("QCOREINTERVALLOVERIFICA")]
1223+
public int? QCOreIntervalloVerifica { get; set; }
1224+
}
9741225
}

0 commit comments

Comments
 (0)