mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +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)";
|
||||
case "PadLeft":
|
||||
if (exp.Arguments.Count == 1) return $"lpad({left}, {getExp(exp.Arguments[0])})";
|
||||
return $"lpad({left}, {getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
|
||||
if (exp.Arguments.Count == 1) return $"padl({left}, {getExp(exp.Arguments[0])})";
|
||||
return $"leftstr(REPLACE(padl({left}, {getExp(exp.Arguments[0])}),' ',{getExp(exp.Arguments[1])}),{getExp(exp.Arguments[0])}-length({left}))||{left}";
|
||||
case "PadRight":
|
||||
if (exp.Arguments.Count == 1) return $"rpad({left}, {getExp(exp.Arguments[0])})";
|
||||
return $"rpad({left}, {getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
|
||||
var totalWidthValue = getExp(exp.Arguments[0]);
|
||||
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 "TrimStart":
|
||||
case "TrimEnd":
|
||||
|
Loading…
x
Reference in New Issue
Block a user