Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package com.facebook.presto.operator.scalar;
 
 
 
 import java.net.URI;
 
 import static com.google.common.base.Strings.nullToEmpty;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 public final class UrlFunctions
 {
     private static final Splitter QUERY_SPLITTER = Splitter.on('&');
     private static final Splitter ARG_SPLITTER = Splitter.on('=').limit(2);
 
     private UrlFunctions() {}
 
     @Nullable
     @Description("extract protocol from url")
     @ScalarFunction
     public static Slice urlExtractProtocol(@SqlType(.Slice url)
     {
         URI uri = parseUrl(url);
         return (uri == null) ? null : slice(uri.getScheme());
     }
 
     @Nullable
     @Description("extract host from url")
     @ScalarFunction
     public static Slice urlExtractHost(@SqlType(.Slice url)
     {
         URI uri = parseUrl(url);
         return (uri == null) ? null : slice(uri.getHost());
     }
 
     @Nullable
     @Description("extract port from url")
     @ScalarFunction
     public static Long urlExtractPort(@SqlType(.Slice url)
     {
         URI uri = parseUrl(url);
         if ((uri == null) || (uri.getPort() < 0)) {
             return null;
         }
         return (longuri.getPort();
     }
 
     @Nullable
     @Description("extract part from url")
     @ScalarFunction
     public static Slice urlExtractPath(@SqlType(.Slice url)
     {
         URI uri = parseUrl(url);
         return (uri == null) ? null : slice(uri.getPath());
     }
 
     @Nullable
     @Description("extract query from url")
     @ScalarFunction
     public static Slice urlExtractQuery(@SqlType(.Slice url)
     {
         URI uri = parseUrl(url);
         return (uri == null) ? null : slice(uri.getQuery());
     }
 
     @Nullable
     @Description("extract fragment from url")
     @ScalarFunction
     public static Slice urlExtractFragment(@SqlType(.Slice url)
     {
         URI uri = parseUrl(url);
         return (uri == null) ? null : slice(uri.getFragment());
    }
    @Nullable
    @Description("extract query parameter from url")
    public static Slice urlExtractParameter(@SqlType(.Slice url, @SqlType(.Slice parameterName)
    {
        URI uri = parseUrl(url);
        if ((uri == null) || (uri.getQuery() == null)) {
            return null;
        }
        Slice query = slice(uri.getQuery());
        String parameter = parameterName.toString();
        Iterable<StringqueryArgs = .split(query.toString());
        for (String queryArg : queryArgs) {
            Iterator<Stringarg = .split(queryArg).iterator();
            if (arg.next().equals(parameter)) {
                if (arg.hasNext()) {
                    return Slices.copiedBuffer(arg.next(), );
                }
                // first matched key is empty
                return .;
            }
        }
        // no key matched
        return null;
    }
    private static Slice slice(@Nullable String s)
    {
        return Slices.copiedBuffer(nullToEmpty(s), );
    }
    @Nullable
    private static URI parseUrl(Slice url)
    {
        try {
            return new URI(url.toString());
        }
        catch (URISyntaxException e) {
            return null;
        }
    }
New to GrepCode? Check out our FAQ X