186 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						||
 | 
						||
# Simple HeroDB Demo - Basic Redis Commands
 | 
						||
# This script demonstrates basic Redis functionality that's currently implemented
 | 
						||
 | 
						||
set -e  # Exit on any error
 | 
						||
 | 
						||
# Configuration
 | 
						||
REDIS_HOST="localhost"
 | 
						||
REDIS_PORT="6381"
 | 
						||
REDIS_CLI="redis-cli -h $REDIS_HOST -p $REDIS_PORT"
 | 
						||
 | 
						||
# Colors for output
 | 
						||
RED='\033[0;31m'
 | 
						||
GREEN='\033[0;32m'
 | 
						||
BLUE='\033[0;34m'
 | 
						||
YELLOW='\033[1;33m'
 | 
						||
NC='\033[0m' # No Color
 | 
						||
 | 
						||
# Function to print colored output
 | 
						||
print_header() {
 | 
						||
    echo -e "${BLUE}=== $1 ===${NC}"
 | 
						||
}
 | 
						||
 | 
						||
print_success() {
 | 
						||
    echo -e "${GREEN}✓ $1${NC}"
 | 
						||
}
 | 
						||
 | 
						||
print_info() {
 | 
						||
    echo -e "${YELLOW}ℹ $1${NC}"
 | 
						||
}
 | 
						||
 | 
						||
print_error() {
 | 
						||
    echo -e "${RED}✗ $1${NC}"
 | 
						||
}
 | 
						||
 | 
						||
# Function to check if HeroDB is running
 | 
						||
check_herodb() {
 | 
						||
    print_info "Checking if HeroDB is running on port $REDIS_PORT..."
 | 
						||
    if ! $REDIS_CLI ping > /dev/null 2>&1; then
 | 
						||
        print_error "HeroDB is not running on port $REDIS_PORT"
 | 
						||
        print_info "Please start HeroDB with: cargo run -- --port $REDIS_PORT"
 | 
						||
        exit 1
 | 
						||
    fi
 | 
						||
    print_success "HeroDB is running and responding"
 | 
						||
}
 | 
						||
 | 
						||
# Function to execute Redis command with error handling
 | 
						||
execute_cmd() {
 | 
						||
    local cmd="$1"
 | 
						||
    local description="$2"
 | 
						||
    
 | 
						||
    echo -e "${YELLOW}Command:${NC} $cmd"
 | 
						||
    if result=$($REDIS_CLI $cmd 2>&1); then
 | 
						||
        echo -e "${GREEN}Result:${NC} $result"
 | 
						||
        return 0
 | 
						||
    else
 | 
						||
        print_error "Failed: $description"
 | 
						||
        echo "Error: $result"
 | 
						||
        return 1
 | 
						||
    fi
 | 
						||
}
 | 
						||
 | 
						||
# Main demo function
 | 
						||
main() {
 | 
						||
    clear
 | 
						||
    print_header "HeroDB Basic Functionality Demo"
 | 
						||
    echo "This demo shows basic Redis commands that are currently implemented"
 | 
						||
    echo "HeroDB runs on port $REDIS_PORT (instead of Redis default 6379)"
 | 
						||
    echo
 | 
						||
 | 
						||
    # Check if HeroDB is running
 | 
						||
    check_herodb
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 1: Basic Key-Value Operations"
 | 
						||
    
 | 
						||
    execute_cmd "SET greeting 'Hello HeroDB!'" "Setting a simple key-value pair"
 | 
						||
    echo
 | 
						||
    execute_cmd "GET greeting" "Getting the value"
 | 
						||
    echo
 | 
						||
    execute_cmd "SET counter 42" "Setting a numeric value"
 | 
						||
    echo
 | 
						||
    execute_cmd "INCR counter" "Incrementing the counter"
 | 
						||
    echo
 | 
						||
    execute_cmd "GET counter" "Getting the incremented value"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 2: Hash Operations"
 | 
						||
    
 | 
						||
    execute_cmd "HSET user:1 name 'John Doe' email 'john@example.com' age 30" "Setting hash fields"
 | 
						||
    echo
 | 
						||
    execute_cmd "HGET user:1 name" "Getting a specific field"
 | 
						||
    echo
 | 
						||
    execute_cmd "HGETALL user:1" "Getting all fields"
 | 
						||
    echo
 | 
						||
    execute_cmd "HLEN user:1" "Getting hash length"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 3: List Operations"
 | 
						||
    
 | 
						||
    execute_cmd "LPUSH tasks 'Write code' 'Test code' 'Deploy code'" "Adding items to list"
 | 
						||
    echo
 | 
						||
    execute_cmd "LLEN tasks" "Getting list length"
 | 
						||
    echo
 | 
						||
    execute_cmd "LRANGE tasks 0 -1" "Getting all list items"
 | 
						||
    echo
 | 
						||
    execute_cmd "LPOP tasks" "Popping from left"
 | 
						||
    echo
 | 
						||
    execute_cmd "LRANGE tasks 0 -1" "Checking remaining items"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 4: Key Management"
 | 
						||
    
 | 
						||
    execute_cmd "KEYS *" "Listing all keys"
 | 
						||
    echo
 | 
						||
    execute_cmd "EXISTS greeting" "Checking if key exists"
 | 
						||
    echo
 | 
						||
    execute_cmd "TYPE user:1" "Getting key type"
 | 
						||
    echo
 | 
						||
    execute_cmd "DBSIZE" "Getting database size"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 5: Expiration"
 | 
						||
    
 | 
						||
    execute_cmd "SET temp_key 'temporary value'" "Setting temporary key"
 | 
						||
    echo
 | 
						||
    execute_cmd "EXPIRE temp_key 5" "Setting 5 second expiration"
 | 
						||
    echo
 | 
						||
    execute_cmd "TTL temp_key" "Checking time to live"
 | 
						||
    echo
 | 
						||
    print_info "Waiting 2 seconds..."
 | 
						||
    sleep 2
 | 
						||
    execute_cmd "TTL temp_key" "Checking TTL again"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 6: Multiple Operations"
 | 
						||
    
 | 
						||
    execute_cmd "MSET key1 'value1' key2 'value2' key3 'value3'" "Setting multiple keys"
 | 
						||
    echo
 | 
						||
    execute_cmd "MGET key1 key2 key3" "Getting multiple values"
 | 
						||
    echo
 | 
						||
    execute_cmd "DEL key1 key2" "Deleting multiple keys"
 | 
						||
    echo
 | 
						||
    execute_cmd "EXISTS key1 key2 key3" "Checking existence of multiple keys"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 7: Search Commands (Placeholder)"
 | 
						||
    print_info "Testing FT.CREATE command (currently returns placeholder response)"
 | 
						||
    
 | 
						||
    execute_cmd "FT.CREATE test_index SCHEMA title TEXT description TEXT" "Creating search index"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 8: Server Information"
 | 
						||
    
 | 
						||
    execute_cmd "INFO" "Getting server information"
 | 
						||
    echo
 | 
						||
    execute_cmd "CONFIG GET dir" "Getting configuration"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Step 9: Cleanup"
 | 
						||
    
 | 
						||
    execute_cmd "FLUSHDB" "Clearing database"
 | 
						||
    echo
 | 
						||
    execute_cmd "DBSIZE" "Confirming database is empty"
 | 
						||
    echo
 | 
						||
 | 
						||
    print_header "Demo Summary"
 | 
						||
    echo "This demonstration showed:"
 | 
						||
    echo "• Basic key-value operations (GET, SET, INCR)"
 | 
						||
    echo "• Hash operations (HSET, HGET, HGETALL)"
 | 
						||
    echo "• List operations (LPUSH, LPOP, LRANGE)"
 | 
						||
    echo "• Key management (KEYS, EXISTS, TYPE, DEL)"
 | 
						||
    echo "• Expiration handling (EXPIRE, TTL)"
 | 
						||
    echo "• Multiple key operations (MSET, MGET)"
 | 
						||
    echo "• Server information commands"
 | 
						||
    echo
 | 
						||
    print_success "HeroDB basic functionality demo completed successfully!"
 | 
						||
    echo
 | 
						||
    print_info "Note: Full-text search (FT.*) commands are defined but not yet fully implemented"
 | 
						||
    print_info "To run HeroDB server: cargo run -- --port 6381"
 | 
						||
    print_info "To connect with redis-cli: redis-cli -h localhost -p 6381"
 | 
						||
}
 | 
						||
 | 
						||
# Run the demo
 | 
						||
main "$@" |