tangled
alpha
login
or
join now
slices.network
/
slices
137
fork
atom
Highly ambitious ATProtocol AppView service and sdks
137
fork
atom
overview
issues
10
pulls
3
pipelines
fix getActors query to query handles properly
chadtmiller.com
6 months ago
612b84bc
5b05850b
+370
-2
7 changed files
expand all
collapse all
unified
split
api
.sqlx
query-180c7eee2019dd4f04956a470aaf55064185639ac5a5d9f06cad38af68f122fa.json
query-6b0bac4826d11b672583ccae3eb164239f2e17a2f8f13ec0c092557186e80d7e.json
query-6fb1c37707b0004668ba441a1bb659b6cebe33800e57294e5a37478787af03bd.json
query-d058bcd789a2e7c898c23d183704058bfded359222402771c2861b5ebf663369.json
query-d219e957aeb041e38abaec21b6c9da3124e2804f1ee745e57794ef5cb100757f.json
query-e80c5417fe3faffae69e8f93373b1a01c71cda8391c454edfbab881293210c9c.json
src
database.rs
+43
api/.sqlx/query-180c7eee2019dd4f04956a470aaf55064185639ac5a5d9f06cad38af68f122fa.json
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT did, handle, slice_uri, indexed_at\n FROM actor\n WHERE slice_uri = $1 AND handle = $2 AND did > $3\n ORDER BY did ASC\n LIMIT $4\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "did",
9
9
+
"type_info": "Text"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "handle",
14
14
+
"type_info": "Text"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "slice_uri",
19
19
+
"type_info": "Text"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "indexed_at",
24
24
+
"type_info": "Text"
25
25
+
}
26
26
+
],
27
27
+
"parameters": {
28
28
+
"Left": [
29
29
+
"Text",
30
30
+
"Text",
31
31
+
"Text",
32
32
+
"Int8"
33
33
+
]
34
34
+
},
35
35
+
"nullable": [
36
36
+
false,
37
37
+
true,
38
38
+
false,
39
39
+
false
40
40
+
]
41
41
+
},
42
42
+
"hash": "180c7eee2019dd4f04956a470aaf55064185639ac5a5d9f06cad38af68f122fa"
43
43
+
}
+43
api/.sqlx/query-6b0bac4826d11b672583ccae3eb164239f2e17a2f8f13ec0c092557186e80d7e.json
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT did, handle, slice_uri, indexed_at\n FROM actor\n WHERE slice_uri = $1 AND handle ILIKE $2 AND did > $3\n ORDER BY did ASC\n LIMIT $4\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "did",
9
9
+
"type_info": "Text"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "handle",
14
14
+
"type_info": "Text"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "slice_uri",
19
19
+
"type_info": "Text"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "indexed_at",
24
24
+
"type_info": "Text"
25
25
+
}
26
26
+
],
27
27
+
"parameters": {
28
28
+
"Left": [
29
29
+
"Text",
30
30
+
"Text",
31
31
+
"Text",
32
32
+
"Int8"
33
33
+
]
34
34
+
},
35
35
+
"nullable": [
36
36
+
false,
37
37
+
true,
38
38
+
false,
39
39
+
false
40
40
+
]
41
41
+
},
42
42
+
"hash": "6b0bac4826d11b672583ccae3eb164239f2e17a2f8f13ec0c092557186e80d7e"
43
43
+
}
+42
api/.sqlx/query-6fb1c37707b0004668ba441a1bb659b6cebe33800e57294e5a37478787af03bd.json
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT did, handle, slice_uri, indexed_at\n FROM actor\n WHERE slice_uri = $1 AND handle = $2\n ORDER BY did ASC\n LIMIT $3\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "did",
9
9
+
"type_info": "Text"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "handle",
14
14
+
"type_info": "Text"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "slice_uri",
19
19
+
"type_info": "Text"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "indexed_at",
24
24
+
"type_info": "Text"
25
25
+
}
26
26
+
],
27
27
+
"parameters": {
28
28
+
"Left": [
29
29
+
"Text",
30
30
+
"Text",
31
31
+
"Int8"
32
32
+
]
33
33
+
},
34
34
+
"nullable": [
35
35
+
false,
36
36
+
true,
37
37
+
false,
38
38
+
false
39
39
+
]
40
40
+
},
41
41
+
"hash": "6fb1c37707b0004668ba441a1bb659b6cebe33800e57294e5a37478787af03bd"
42
42
+
}
+42
api/.sqlx/query-d058bcd789a2e7c898c23d183704058bfded359222402771c2861b5ebf663369.json
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT did, handle, slice_uri, indexed_at\n FROM actor\n WHERE slice_uri = $1 AND did = $2\n ORDER BY did ASC\n LIMIT $3\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "did",
9
9
+
"type_info": "Text"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "handle",
14
14
+
"type_info": "Text"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "slice_uri",
19
19
+
"type_info": "Text"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "indexed_at",
24
24
+
"type_info": "Text"
25
25
+
}
26
26
+
],
27
27
+
"parameters": {
28
28
+
"Left": [
29
29
+
"Text",
30
30
+
"Text",
31
31
+
"Int8"
32
32
+
]
33
33
+
},
34
34
+
"nullable": [
35
35
+
false,
36
36
+
true,
37
37
+
false,
38
38
+
false
39
39
+
]
40
40
+
},
41
41
+
"hash": "d058bcd789a2e7c898c23d183704058bfded359222402771c2861b5ebf663369"
42
42
+
}
+42
api/.sqlx/query-d219e957aeb041e38abaec21b6c9da3124e2804f1ee745e57794ef5cb100757f.json
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT did, handle, slice_uri, indexed_at\n FROM actor\n WHERE slice_uri = $1 AND handle ILIKE $2\n ORDER BY did ASC\n LIMIT $3\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "did",
9
9
+
"type_info": "Text"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "handle",
14
14
+
"type_info": "Text"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "slice_uri",
19
19
+
"type_info": "Text"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "indexed_at",
24
24
+
"type_info": "Text"
25
25
+
}
26
26
+
],
27
27
+
"parameters": {
28
28
+
"Left": [
29
29
+
"Text",
30
30
+
"Text",
31
31
+
"Int8"
32
32
+
]
33
33
+
},
34
34
+
"nullable": [
35
35
+
false,
36
36
+
true,
37
37
+
false,
38
38
+
false
39
39
+
]
40
40
+
},
41
41
+
"hash": "d219e957aeb041e38abaec21b6c9da3124e2804f1ee745e57794ef5cb100757f"
42
42
+
}
+43
api/.sqlx/query-e80c5417fe3faffae69e8f93373b1a01c71cda8391c454edfbab881293210c9c.json
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT did, handle, slice_uri, indexed_at\n FROM actor\n WHERE slice_uri = $1 AND did = $2 AND did > $3\n ORDER BY did ASC\n LIMIT $4\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "did",
9
9
+
"type_info": "Text"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "handle",
14
14
+
"type_info": "Text"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "slice_uri",
19
19
+
"type_info": "Text"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "indexed_at",
24
24
+
"type_info": "Text"
25
25
+
}
26
26
+
],
27
27
+
"parameters": {
28
28
+
"Left": [
29
29
+
"Text",
30
30
+
"Text",
31
31
+
"Text",
32
32
+
"Int8"
33
33
+
]
34
34
+
},
35
35
+
"nullable": [
36
36
+
false,
37
37
+
true,
38
38
+
false,
39
39
+
false
40
40
+
]
41
41
+
},
42
42
+
"hash": "e80c5417fe3faffae69e8f93373b1a01c71cda8391c454edfbab881293210c9c"
43
43
+
}
+115
-2
api/src/database.rs
···
592
592
593
593
// Handle where conditions with specific cases
594
594
let records = if let Some(conditions) = where_conditions {
595
595
-
// Handle specific common cases
596
596
-
if let Some(did_condition) = conditions.get("did") {
595
595
+
// Check for handle contains filter
596
596
+
if let Some(handle_condition) = conditions.get("handle") {
597
597
+
if let Some(contains_value) = &handle_condition.contains {
598
598
+
let pattern = format!("%{}%", contains_value);
599
599
+
if let Some(cursor_did) = cursor {
600
600
+
sqlx::query_as!(
601
601
+
Actor,
602
602
+
r#"
603
603
+
SELECT did, handle, slice_uri, indexed_at
604
604
+
FROM actor
605
605
+
WHERE slice_uri = $1 AND handle ILIKE $2 AND did > $3
606
606
+
ORDER BY did ASC
607
607
+
LIMIT $4
608
608
+
"#,
609
609
+
slice_uri,
610
610
+
pattern,
611
611
+
cursor_did,
612
612
+
limit as i64
613
613
+
)
614
614
+
.fetch_all(&self.pool)
615
615
+
.await?
616
616
+
} else {
617
617
+
sqlx::query_as!(
618
618
+
Actor,
619
619
+
r#"
620
620
+
SELECT did, handle, slice_uri, indexed_at
621
621
+
FROM actor
622
622
+
WHERE slice_uri = $1 AND handle ILIKE $2
623
623
+
ORDER BY did ASC
624
624
+
LIMIT $3
625
625
+
"#,
626
626
+
slice_uri,
627
627
+
pattern,
628
628
+
limit as i64
629
629
+
)
630
630
+
.fetch_all(&self.pool)
631
631
+
.await?
632
632
+
}
633
633
+
} else if let Some(eq_value) = &handle_condition.eq {
634
634
+
let handle_str = eq_value.as_str().unwrap_or("");
635
635
+
if let Some(cursor_did) = cursor {
636
636
+
sqlx::query_as!(
637
637
+
Actor,
638
638
+
r#"
639
639
+
SELECT did, handle, slice_uri, indexed_at
640
640
+
FROM actor
641
641
+
WHERE slice_uri = $1 AND handle = $2 AND did > $3
642
642
+
ORDER BY did ASC
643
643
+
LIMIT $4
644
644
+
"#,
645
645
+
slice_uri,
646
646
+
handle_str,
647
647
+
cursor_did,
648
648
+
limit as i64
649
649
+
)
650
650
+
.fetch_all(&self.pool)
651
651
+
.await?
652
652
+
} else {
653
653
+
sqlx::query_as!(
654
654
+
Actor,
655
655
+
r#"
656
656
+
SELECT did, handle, slice_uri, indexed_at
657
657
+
FROM actor
658
658
+
WHERE slice_uri = $1 AND handle = $2
659
659
+
ORDER BY did ASC
660
660
+
LIMIT $3
661
661
+
"#,
662
662
+
slice_uri,
663
663
+
handle_str,
664
664
+
limit as i64
665
665
+
)
666
666
+
.fetch_all(&self.pool)
667
667
+
.await?
668
668
+
}
669
669
+
} else {
670
670
+
// Default case with basic filtering
671
671
+
self.query_actors_with_cursor(slice_uri, cursor, limit).await?
672
672
+
}
673
673
+
} else if let Some(did_condition) = conditions.get("did") {
597
674
if let Some(in_values) = &did_condition.in_values {
598
675
let string_values: Vec<String> = in_values.iter()
599
676
.filter_map(|v| v.as_str())
···
615
692
)
616
693
.fetch_all(&self.pool)
617
694
.await?
695
695
+
} else if let Some(eq_value) = &did_condition.eq {
696
696
+
let did_str = eq_value.as_str().unwrap_or("");
697
697
+
if let Some(cursor_did) = cursor {
698
698
+
sqlx::query_as!(
699
699
+
Actor,
700
700
+
r#"
701
701
+
SELECT did, handle, slice_uri, indexed_at
702
702
+
FROM actor
703
703
+
WHERE slice_uri = $1 AND did = $2 AND did > $3
704
704
+
ORDER BY did ASC
705
705
+
LIMIT $4
706
706
+
"#,
707
707
+
slice_uri,
708
708
+
did_str,
709
709
+
cursor_did,
710
710
+
limit as i64
711
711
+
)
712
712
+
.fetch_all(&self.pool)
713
713
+
.await?
714
714
+
} else {
715
715
+
sqlx::query_as!(
716
716
+
Actor,
717
717
+
r#"
718
718
+
SELECT did, handle, slice_uri, indexed_at
719
719
+
FROM actor
720
720
+
WHERE slice_uri = $1 AND did = $2
721
721
+
ORDER BY did ASC
722
722
+
LIMIT $3
723
723
+
"#,
724
724
+
slice_uri,
725
725
+
did_str,
726
726
+
limit as i64
727
727
+
)
728
728
+
.fetch_all(&self.pool)
729
729
+
.await?
730
730
+
}
618
731
} else {
619
732
// Default case with basic filtering
620
733
self.query_actors_with_cursor(slice_uri, cursor, limit).await?