|
1 | 1 | use datafusion::scalar::ScalarValue; |
2 | 2 | use log::trace; |
3 | 3 | use rand::Rng; |
| 4 | +use std::str::FromStr; |
4 | 5 | use std::{ |
5 | 6 | collections::HashMap, |
6 | 7 | sync::{Arc, LazyLock, RwLock as RwLockSync, Weak}, |
@@ -56,6 +57,28 @@ pub enum QueryState { |
56 | 57 | }, |
57 | 58 | } |
58 | 59 |
|
| 60 | +#[derive(Debug)] |
| 61 | +pub enum CacheMode { |
| 62 | + StaleIfSlow, |
| 63 | + StaleWhileRevalidate, |
| 64 | + MustRevalidate, |
| 65 | + NoCache, |
| 66 | +} |
| 67 | + |
| 68 | +impl FromStr for CacheMode { |
| 69 | + type Err = String; |
| 70 | + |
| 71 | + fn from_str(s: &str) -> Result<Self, Self::Err> { |
| 72 | + match s { |
| 73 | + "stale-if-slow" => Ok(Self::StaleIfSlow), |
| 74 | + "stale-while-revalidate" => Ok(Self::StaleWhileRevalidate), |
| 75 | + "must-revalidate" => Ok(Self::MustRevalidate), |
| 76 | + "no-cache" => Ok(Self::NoCache), |
| 77 | + other => Err(format!("Unknown cache mode: {}", other)), |
| 78 | + } |
| 79 | + } |
| 80 | +} |
| 81 | + |
59 | 82 | #[derive(Debug)] |
60 | 83 | pub struct SessionState { |
61 | 84 | // connection id, immutable |
@@ -90,6 +113,8 @@ pub struct SessionState { |
90 | 113 | pub statements: RWLockAsync<HashMap<String, PreparedStatement>>, |
91 | 114 |
|
92 | 115 | auth_context_expiration: Duration, |
| 116 | + |
| 117 | + pub cache_mode: RwLockSync<Option<CacheMode>>, |
93 | 118 | } |
94 | 119 |
|
95 | 120 | impl SessionState { |
@@ -120,6 +145,7 @@ impl SessionState { |
120 | 145 | query: RwLockSync::new(QueryState::None), |
121 | 146 | statements: RWLockAsync::new(HashMap::new()), |
122 | 147 | auth_context_expiration, |
| 148 | + cache_mode: RwLockSync::new(None), |
123 | 149 | } |
124 | 150 | } |
125 | 151 |
|
|
0 commit comments