mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
#1021 fix sqlite padleft padright
This commit is contained in:
parent
8c022b3e0a
commit
1b7dd3024f
73
FreeSql.Tests/FreeSql.Tests/Issues/1021.cs
Normal file
73
FreeSql.Tests/FreeSql.Tests/Issues/1021.cs
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
using FreeSql.DataAnnotations;
|
||||||
|
using FreeSql;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Xunit;
|
||||||
|
using System.Linq;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using NpgsqlTypes;
|
||||||
|
using Npgsql.LegacyPostgis;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Data.SqlClient;
|
||||||
|
using kwlib;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace FreeSql.Tests.Issues
|
||||||
|
{
|
||||||
|
public class _1021
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void PadLeft()
|
||||||
|
{
|
||||||
|
var fsql = g.sqlite;
|
||||||
|
|
||||||
|
var list1 = fsql.Select<sport>()
|
||||||
|
.OrderBy(t => t.OldId.PadLeft(4))
|
||||||
|
.ToList(r => new sport { id = r.id, name = r.name, OldId = r.OldId.PadLeft(4) });
|
||||||
|
/*
|
||||||
|
SELECT a."id" as1, a."name" as2, padl(a."OldId", 4) as3
|
||||||
|
FROM "sport" a
|
||||||
|
ORDER BY padl(a."OldId", 4)
|
||||||
|
*/
|
||||||
|
var list2 = fsql.Select<sport>()
|
||||||
|
.OrderBy(t => t.OldId.PadLeft(2,'0'))
|
||||||
|
.ToList(r => new sport { id = r.id, name = r.name, OldId = r.OldId.PadLeft(2, '0') });
|
||||||
|
/*
|
||||||
|
SELECT a."id" as1, a."name" as2, leftstr(REPLACE(padl(a."OldId", 2 ), ' ', '0'), 2-length(a."OldId"))||a."OldId" as3
|
||||||
|
FROM "sport" a
|
||||||
|
ORDER BY leftstr(REPLACE(padl(a."OldId", 2 ), ' ', '0'), 2-length(a."OldId"))||a."OldId"
|
||||||
|
*/
|
||||||
|
var list3 = fsql.Select<sport>()
|
||||||
|
.OrderBy(t => t.OldId.PadRight(4))
|
||||||
|
.ToList(r => new sport { id = r.id, name = r.name, OldId = r.OldId.PadRight(4) });
|
||||||
|
/*
|
||||||
|
SELECT a."id" as1, a."name" as2, padr(a."OldId", 4) as3
|
||||||
|
FROM "sport" a
|
||||||
|
ORDER BY padr(a."OldId", 4)
|
||||||
|
*/
|
||||||
|
var list4 = fsql.Select<sport>()
|
||||||
|
.OrderBy(t => t.OldId.PadRight(2, '0'))
|
||||||
|
.ToList(r => new sport { id = r.id, name = r.name, OldId = r.OldId.PadRight(2, '0') });
|
||||||
|
/*
|
||||||
|
|
||||||
|
SELECT a."id" as1, a."name" as2, a."OldId"||rightstr(REPLACE(padr(a."OldId",2),' ','0'),CASE WHEN 2-length(a."OldId")<=0 THEN 0 ELSE 2-length(a."OldId")END) as3
|
||||||
|
FROM "sport" a
|
||||||
|
ORDER BY a."OldId"||rightstr(REPLACE(padr(a."OldId",2),' ','0'),CASE WHEN 2-length(a."OldId")<=0 THEN 0 ELSE 2-length(a."OldId")END)
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public class sport
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
public string OldId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -317,11 +317,12 @@ namespace FreeSql.Sqlite
|
|||||||
//}
|
//}
|
||||||
return $"(instr({left}, {indexOfFindStr})-1)";
|
return $"(instr({left}, {indexOfFindStr})-1)";
|
||||||
case "PadLeft":
|
case "PadLeft":
|
||||||
if (exp.Arguments.Count == 1) return $"lpad({left}, {getExp(exp.Arguments[0])})";
|
if (exp.Arguments.Count == 1) return $"padl({left}, {getExp(exp.Arguments[0])})";
|
||||||
return $"lpad({left}, {getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
|
return $"leftstr(REPLACE(padl({left}, {getExp(exp.Arguments[0])}),' ',{getExp(exp.Arguments[1])}),{getExp(exp.Arguments[0])}-length({left}))||{left}";
|
||||||
case "PadRight":
|
case "PadRight":
|
||||||
if (exp.Arguments.Count == 1) return $"rpad({left}, {getExp(exp.Arguments[0])})";
|
var totalWidthValue = getExp(exp.Arguments[0]);
|
||||||
return $"rpad({left}, {getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
|
if (exp.Arguments.Count == 1) return $"padr({left}, {totalWidthValue})";
|
||||||
|
return $"{left}||rightstr(REPLACE(padr({left},{totalWidthValue}),' ',{getExp(exp.Arguments[1])}),CASE WHEN {totalWidthValue}-length({left})<=0 THEN 0 ELSE {totalWidthValue}-length({left})END)";
|
||||||
case "Trim":
|
case "Trim":
|
||||||
case "TrimStart":
|
case "TrimStart":
|
||||||
case "TrimEnd":
|
case "TrimEnd":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user